Byt*_*der 3 command-line rename batch-rename mv
我有一个parentdir包含许多目录的文件夹,如下所示:
$ tree parentdir/subdir_1
parentdir/subdir_1
??? important.txt
??? important_001.txt
??? important_002.log
??? important_007.bmp
??? something
??? else.mp3
??? nothing.000
??? ignore.me
Run Code Online (Sandbox Code Playgroud)
我想要的是将名称以 开头的所有文件移动important到父目录parentdir,并通过在每个文件名前加上它们来自的子目录的名称来重命名它们。
例如,parentdir/subdir_1/important_001.txt应该移动/重命名为parentdir/subdir_1-important_001.txt.
我怎样才能最轻松地在一个巨大的目录上执行这个批量移动/重命名操作?
在parentdir你可以使用
for f in ./*/important*; do rename -n 's#\./([^/]+)/(.*)#$1-$2#' "$f" ; done
Run Code Online (Sandbox Code Playgroud)
-n测试后删除以实际移动和重命名
s#old#new#替换old为new\./([^/]+)/(.*)匹配文字./然后保存除 之外的一些字符/,然后匹配/,然后保存其余的$1-$2 两个保存的模式分开 -放弃路径分隔符将文件parentdir强制移动到
事后思考:在这种情况下更简单,您可以使用s#/#-#替换/with -,./从一开始就省略
for f in */important*; do rename -n 's#/#-#' "$f" ; done
Run Code Online (Sandbox Code Playgroud)