Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell Bash:递归地复制和重命名文件_Shell - Fatal编程技术网

Shell Bash:递归地复制和重命名文件

Shell 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

我有很多文件的名字以“_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/_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' {} \;