Bash:递归复制和重命名文件
问题出现的原因是缺少引号,这会导致文件名中包含换行符的文件无法正常工作。解决方法是使用find ... -exec
或find ... -print0 | xargs -0
来代替原来的方法。
如果你使用的是bash 4,可以使用以下代码:
shopt -s globstar for file in **/*_100.jpg; do echo mv "$file" "${file/_100.jpg/_crop.jpg}" done
如果不是bash 4,可以使用以下代码:
find . -type f -iname "*_100.jpg" | while read -r FILE do echo mv "${FILE}" "${FILE/_100.jpg/_crop.jpg}" done
这些代码修复了缺少引号的问题,所以不再需要使用xargs。但是,接受的答案也没有引号。