Bash脚本从文本文件源重命名文件

用户名

我是bash的新手。我几乎可以一次用简单的命令1执行简单的管理任务。但是,我的任务是使用文本文件作为重命名的源来重命名目录中的某些文件,并且我会深深地体会到一些指针,因为我对此深有体会。

让我解释:

New File Name.xlsx 0.1  000011F4.dat 
New File Name.xlsx 0.2  000011F5.dat 
New File Name.xlsx 0.3  000011F6.dat 
New File Name.xlsx 0.4  000011F7.dat 
New File Name.xlsx 0.5  000011F8.dat 
New File Name.xlsx 0.6  000011F9.dat 

我拥有的源文本文件在某种程度上类似于上述内容。目的是第一个“列”是文件的新名称,中间是版本,第三个是当前文件名。

我需要重命名目录中的.dat文件,将它们更改为第一列中显示的名称。我还需要在每个文件的开头添加版本号0.1、0.2等。

我有几个问题:

文件中包含空格是否是一个大问题?在每个文件字符串周围添加“”会更好吗?

基本上我不知道从哪里开始,任何帮助将不胜感激。如您所见,它比通常的重命名稍微复杂一点,这就需要将version列添加到文件名的开头和列表中的空白处。

用户名

这应该起作用:

sh <(sed -r 's/^\s*(.*)\s+([0-9\.]+)\s+([0-9A-Z]{8}\.dat)\s*$/mv -iv \3 "\2 \1"/' files)

...files源文件的名称在哪里

这样做是通过使用进程替换sed命令的结果传递sh(外壳程序)的新实例命令的输出为:sed

mv -iv 000011F4.dat "0.1 New File Name.xlsx"
mv -iv 000011F5.dat "0.2 New File Name.xlsx"
mv -iv 000011F6.dat "0.3 New File Name.xlsx"
mv -iv 000011F7.dat "0.4 New File Name.xlsx"
mv -iv 000011F8.dat "0.5 New File Name.xlsx"
mv -iv 000011F9.dat "0.6 New File Name.xlsx"

sed命令分开,它搜索一个模式:

  • ^ -行的开头
  • \s* -开头的任何空格
  • (.*)-任何字符(括号将结果存储到\1
  • \s+ -至少一个空白字符
  • ([0-9\.]+)-在至少一个0-9.(存储到\2
  • \s+ -至少一个空白字符
  • ([0-9A-Z]{8}\.dat)-0-9或中的8个字符A-Z,后跟.dat(存储到\3
  • \s* -结尾的任何空格
  • $ -行尾

...并将其替换为mv -iv \3 "\2 \1",其中\1to\3是先前存储的值。如果愿意,可以在版本号和文件名其余部分之间使用空格以外的其他内容。

结果如下:

$ ls -l
total 60
-rw-rw-r-- 1 z z   0 Aug  8 14:15 000011F4.dat
-rw-rw-r-- 1 z z   0 Aug  8 14:15 000011F5.dat
-rw-rw-r-- 1 z z   0 Aug  8 14:15 000011F6.dat
-rw-rw-r-- 1 z z   0 Aug  8 14:15 000011F7.dat
-rw-rw-r-- 1 z z   0 Aug  8 14:15 000011F8.dat
-rw-rw-r-- 1 z z   0 Aug  8 14:15 000011F9.dat
-rw-rw-r-- 1 z z 222 Aug  8 13:47 files
$ sh <(sed -r 's/^\s*(.*)\s+([0-9\.]+)\s+([0-9A-Z]{8}\.dat)\s*$/mv -iv \3 "\2 \1"/' files)
`000011F4.dat' -> `0.1 New File Name.xlsx'
`000011F5.dat' -> `0.2 New File Name.xlsx'
`000011F6.dat' -> `0.3 New File Name.xlsx'
`000011F7.dat' -> `0.4 New File Name.xlsx'
`000011F8.dat' -> `0.5 New File Name.xlsx'
`000011F9.dat' -> `0.6 New File Name.xlsx'
$ ls -l
total 60
-rw-rw-r-- 1 z z   0 Aug  8 14:15 0.1 New File Name.xlsx
-rw-rw-r-- 1 z z   0 Aug  8 14:15 0.2 New File Name.xlsx
-rw-rw-r-- 1 z z   0 Aug  8 14:15 0.3 New File Name.xlsx
-rw-rw-r-- 1 z z   0 Aug  8 14:15 0.4 New File Name.xlsx
-rw-rw-r-- 1 z z   0 Aug  8 14:15 0.5 New File Name.xlsx
-rw-rw-r-- 1 z z   0 Aug  8 14:15 0.6 New File Name.xlsx
-rw-rw-r-- 1 z z 222 Aug  8 13:47 files

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用文本文件作为源来重命名文件

尝试根据文本文件重命名文件

从文本文件重命名海量文件

如何从文本文件重命名python中的文件

在使用perl重命名文本文件时,在文本文件末尾出现问号

如何在python中重命名文本文件?

重命名/添加扩展文本文件中的内容

Powershell根据文本中的字符串重命名文本文件->更简洁的脚本方式?

使用文本文件重命名文件夹中的批处理文件

如何重命名子文件夹或zip文件中的文本文件

根据文本文件中包含的文本重命名目录中的文件

如何编写文本文件,然后在相同的Bash脚本中读取文本文件?

从文本文件中提取字符串,然后在bash中相应地重命名它们

使用 bash 脚本,如何连接文本以重命名文件?

通过使用文本文件中的前缀来重命名文件

如何根据文本文件中的名称重命名文件?

使用文本文件中的列表重命名目录中的文件

如何根据文本文件中的匹配重命名tar.gz文件

如何根据文本文件的第一行重命名txt文件?

使用bat脚本读取不同文件夹中的相应文本文件后,重命名多个pdf文件

Bash脚本-确定文本文件更改

Bash脚本仅乘以文本文件中的数字?

Bash脚本读取文本文件中的随机行

Bash脚本从文本文件读取变量

使用bash脚本编辑多行文本文件

将文本文件重命名为内容文本(批处理)(powershell)

在 Unix shell 脚本中,根据文件第一行中的匹配字符串重命名文本文件

使用python重命名文本文件中的特定行

使用文本文件中的字符串对图像进行卷曲和重命名