我是Linux的新手sed
,awk
但是我不介意在新想法上挑战自己。话虽这么说,我了解目的和使用方法rename
以及sed
常见事件(例如,从所有文件中添加a$date
或_1234
从中删除a)的目的。但是,我想弄清楚如何重命名100个与文件类型无关的文件。
重命名示例:
我最初使用bash脚本将所有名称拉到.csv文件中,并将它们放在A列中。在BI列中用新名称编写。现在,由于没有发生任何常见事件,您sed
该如何编写或执行类似操作?
#!/bin/bash
for i in *.ai
do
mv $i $(echo $i | sed "a1,b1")
done
如果碰巧有一个看起来像这样的文件:
old_name1, new_name1
old_name2, new_name2
old_name3, new_name3
您可以做一个肮脏的小把戏:
sed 's/^/mv -vi "/;s/, /" "/;s/$/";/' < names.csv | bash -
sed comamnds(用分号分隔)可以做到这一点(s
用于替代,/
用作分隔符,任何其他字符也可以使用,@
也经常使用):
s/^/mv -vi "/
-mv -vi "
在每行的开头添加(^
是行的开头);s/, /" "/
-用逗号替换逗号,后跟一个空格" "
;s/$/";/
-在所有行的$
末尾加上双引号(表示行尾)因此,输出为sed
:
mv -vi "old_name1" "new_name1"
mv -vi "old_name2" "new_name2"
mv -vi "old_name3" "new_name3"
这将被馈送bash
执行。文件名周围的引号不是强制性的,它们只是保护文件名中任何可能的空格(但是,它们绝对不会对逗号后的空格有所帮助,因为它被用作分隔符)。该-v
指令mv
将显示正在执行的操作(以防万一出问题,您会知道发生了什么),-i
将导致其询问是否覆盖现有文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句