开发者

Bash: recursively copy and rename files

I have a lot of files whose names end with '_100.jpg'. They spread in nested folder / sub-folders. Now I want a trick to recursively copy and rename all of them to have a suffix of '_crop.jpg'. Unfortunately I'm not familiar with bash scripting 开发者_如何学Pythonso don't know the exact way to do this thing. I googled and tried the 'find' command with the '-exec' para but with no luck.

Plz help me. Thanks.


  find bar -iname "*_100.jpg" -printf 'mv %p %p\n' \
    | sed 's/_100\.jpg$/_crop\.jpg/' \
    | while read l; do eval $l; done


if you have bash 4

shopt -s globstar
for file in **/*_100.jpg; do 
  echo mv "$file" "${file/_100.jpg/_crop.jpg}"
one

or using find

find . -type f -iname "*_100.jpg" | while read -r FILE
do
  echo  mv "${FILE}" "${FILE/_100.jpg/_crop.jpg}"
done


This uses a Perl script that you may have already on your system. It's sometimes called prename instead of rename:

find /dir/to/start -type f -iname "*_100.jpg" -exec rename 's/_100/_crop' {} \;

You can make the regexes more robust if you need to protect filenames that have "_100" repeated or in parts of the name you don't want changed.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜