我是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"
,其中\1
to\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] 删除。
我来说两句