【发布时间】:2021-04-06 13:26:11
【问题描述】:
这可行,但是我只想在给定目录的唯一.jpg 时这样做,下面的只是将它们全部重命名为folder.jpg,覆盖其他文件:
find . -type f -name '*.jpg' -execdir mv {} 'folder.jpg' \;
【问题讨论】:
这可行,但是我只想在给定目录的唯一.jpg 时这样做,下面的只是将它们全部重命名为folder.jpg,覆盖其他文件:
find . -type f -name '*.jpg' -execdir mv {} 'folder.jpg' \;
【问题讨论】:
我猜find 不能按匹配数过滤,但你总是可以执行一个 shell 来为你做更精细的检查:
find . -type f -name '*.jpg' -execdir sh -c '[ $# = 1 ] && mv "$1" folder.jpg' sh {} +
【讨论】:
ARG_MAX,脚本将运行不止一次并且文件被覆盖
ARG_MAX,但不想让OP担心可能不会发生的问题。有趣的是,这个命令甚至在超过ARG_MAX 时也能正常工作,除非你运气不好。对于这些情况,-execdir sh -c '[ $# = 1 ] && [ $(find -type f -name \*.jpg -printf . | wc -c) = 1 ] && mv "$1" folder.jpg' sh {} + 可能是一个可行但缓慢的解决方案。
find . -type f \( -name "*.jpg" ! -name "folder.jpg" \) -execdir sh -c '[ $# = 1 ] && mv "$1" folder.jpg' sh {} +