【问题标题】:Rename file if it is the only one with the extension in directory重命名文件,如果它是目录中唯一具有扩展名的文件
【发布时间】:2021-04-06 13:26:11
【问题描述】:

这可行,但是我只想在给定目录的唯一.jpg 时这样做,下面的只是将它们全部重命名为folder.jpg,覆盖其他文件:

find . -type f -name '*.jpg' -execdir mv {} 'folder.jpg' \;

【问题讨论】:

    标签: shell find rename


    【解决方案1】:

    我猜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 {} + 可能是一个可行但缓慢的解决方案。
    • 另一种选择是跟踪访问过的目录
    • 修改为不将folder.jpg移动到folder.jpg find . -type f \( -name "*.jpg" ! -name "folder.jpg" \) -execdir sh -c '[ $# = 1 ] && mv "$1" folder.jpg' sh {} +
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    相关资源
    最近更新 更多