我有一个文件夹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
我想要的是将所有以 开头的文件移动important
到父目录parentdir
,然后通过在每个文件名前加上它们来自的子目录的名称来重命名它们。
例如,parentdir/subdir_1/important_001.txt
应移动/重命名为parentdir/subdir_1-important_001.txt
。
如何才能最轻松地对大型目录执行批量移动/重命名操作?
答案1
你parentdir
可以使用
for f in ./*/important*; do rename -n 's#\./([^/]+)/(.*)#$1-$2#' "$f" ; done
测试后删除-n
以实际移动并重命名
解释
s#old#new#
old
用。。。来代替new
\./([^/]+)/(.*)
匹配文字./
然后保存除之外的一些字符/
,然后匹配/
,然后保存其余的$1-$2
两个保存的模式被-
放弃路径分隔符将文件parentdir
强制移动到
事后想法:更简单来说,在这种情况下,你可以用替换s#/#-#
,从头开始省略/
-
./
for f in */important*; do rename -n 's#/#-#' "$f" ; done