【发布时间】:2017-10-14 17:06:10
【问题描述】:
我最近试图递归遍历一个目录并将所有名为file.jpg的文件复制到与原始目录相同的本地目录中的newfile.jpg。
我找到了一种方法,但它有点麻烦,我有理由相信这可能不是最好的方法。我想在将其放入脚本之前我会问一下。
这是我目前所拥有的:
cd top_of_source_dir
#copy all file.jpg and append 'newfile.jpg' to the name
find ./ -type f -name file.jpg -exec cp '{}' '{}newfile.jpg' \;
#rename the newly created files to 'newfile.jpg'
find ./ -type f -name 'file.jpgnewfile.jpg' -exec rename file.jpgn n '{}' \;
有没有人有办法在源目录的一次迭代中做到这一点?
【问题讨论】:
-
如果您确定输出正确,您可能希望
for f in *.jpg; do echo "$f" "new${f%.*}.jpg"; done将echo更改为mv。 -
@val0x00ff 这不会通过源目录进行递归,是吗?我的文件可以多级进入源目录。
-
# Jacques Gaudin,不,它没有,但你可以做类似
find ./ -type f -name '*.jpg' -exec bash -c 'for f; do n="new${f##*/}"; echo "$f" -> "${f%/*}/$n"; done' _ {} +之类的事情,如果你认为结果是正确的,再次用 'mv` 替换echo -
另外不要忘记删除我放在那里的
->。只是将动作可视化
标签: bash copy subdirectory