因此,我的目录中有一个文件夹,其中包含大约 400-500 个文件(java,cpp,xml 等),每个文件都有一个共同的名称,例如
xml_1_ubuntu.xml
java_1_ubuntu.java
cpp_1_ubuntu.cpp
...
我想将ubuntu
其名称中的(无论其扩展名/文件类型如何)更改为notubuntu
,以便工作目录将包含如下文件
xml_1_notubuntu.xml
java_1_notubuntu.java
cpp_1_notubuntu.cpp
...
有什么办法我可以做到这一点吗?
答案1
是的,使用常规正则表达式的重命名命令:
rename -n 's/_ubuntu/_notubuntu/' *
-n
使其成为一次试运行。如果这样做能达到您的要求,请将其删除。
答案2
我会用rename
。
rename -n 's@_(ubuntu\.)@_not$1@' *_ubuntu.*
bash
您也可以简单地执行此操作:
for f in *_ubuntu.* ; do
base="${f%%_ubuntu.*}"
ext="${f##*_ubuntu.}"
mv "$f" "${base}_notubuntu.${ext}"
done
答案3
使用(来自Universe 存储库中的mmv
包)mmv
mmv -n -- '*_ubuntu*' '#1_notubuntu#2'
如果你有权访问zsh
shell,你可以使用zmv
非常相似的语法
autoload zmv
zmv -n -- '(*)_ubuntu(*)' '$1_notubuntu$2'
或者更简洁地说
zmv -n -- '(*)_(ubuntu*)' '$1_not$2'
在所有情况下,-n
一旦您对转换结果满意,就将其删除。
答案4
没有rename
命令:
ls -1 | awk '{ name=$0; gsub(/ubuntu/,"notubuntu",name); print "mv " $0 " " name }' | bash
如果没有| bash
,它只会显示命令而不实际执行它们(试运行)。