Shell Bash:递归地复制和重命名文件
我有很多文件的名字以“_100.jpg”结尾。它们分布在嵌套文件夹/子文件夹中。现在我想要一个技巧,递归地复制并重命名它们,使其后缀为'\u crop.jpg'。不幸的是,我不熟悉bash脚本,所以不知道具体的方法。我在谷歌上搜索并尝试了带有“-exec”参数的“find”命令,但没有成功 请帮帮我。谢谢。如果您有bash 4Shell Bash:递归地复制和重命名文件,shell,Shell,我有很多文件的名字以“_100.jpg”结尾。它们分布在嵌套文件夹/子文件夹中。现在我想要一个技巧,递归地复制并重命名它们,使其后缀为'\u crop.jpg'。不幸的是,我不熟悉bash脚本,所以不知道具体的方法。我在谷歌上搜索并尝试了带有“-exec”参数的“find”命令,但没有成功 请帮帮我。谢谢。如果您有bash 4 shopt -s globstar for file in **/*_100.jpg; do echo mv "$file" "${file/_100.jpg/_c
shopt -s globstar
for file in **/*_100.jpg; do
echo mv "$file" "${file/_100.jpg/_crop.jpg}"
one
或者使用find
find . -type f -iname "*_100.jpg" | while read -r FILE
do
echo mv "${FILE}" "${FILE/_100.jpg/_crop.jpg}"
done
这将使用系统中可能已经存在的Perl脚本。它有时被称为
prename
,而不是rename
:
find /dir/to/start -type f -iname "*_100.jpg" -exec rename 's/_100/_crop' {} \;
如果需要保护重复了“\u 100”的文件名或名称中不希望更改的部分,可以使正则表达式更加健壮。缺少引号,不适用于包含换行符的文件名。使用
查找-执行
或查找-改为打印0 | xargs-0
。是的,缺少引号并已修复。因此,无需使用xargs。被接受的答案也没有引用…太好了!这是我读过的关于这个话题的最简单的解决方案!当我读到它时,我只是想知道为什么我自己没有找到它!可能b/c我不够聪明:)相关问题:。
find /dir/to/start -type f -iname "*_100.jpg" -exec rename 's/_100/_crop' {} \;