【问题标题】:Using "for i in" for mv recursively [duplicate]递归地对 mv 使用“for i in”[重复]
【发布时间】:2014-07-13 22:33:55
【问题描述】:

这里是 bash 的新手(大部分情况下)...

我成功编写了一个命令来删除单个文件夹中的字符“-”和之后的所有其他字符:

for i in *-*; do mv $i ${i/-*/}; done;

这会将“abcf-D.pdf”等所有文件更改为“abcf.pdf”,从而从文件名中删除图纸的修订名称。

我的目标是递归执行此操作,我们的 pdf 文件都位于文件服务器上的特定目录中,包含在子文件夹和子文件夹中的子文件夹中......

这可以通过单个命令行完成吗?谢谢!

【问题讨论】:

    标签: bash for-loop recursion character mv


    【解决方案1】:
    find . -type f -iname '*-*' -exec rename -v 's/-.*(\.[^.]+)$/$1/' {} \;
    

    假设您只想重命名文件(否则删除-type f)。


    编辑

    重新阅读问题并意识到我做错了任务,所以我编辑了正则表达式。

    【讨论】:

    • 嗯,我没有在 Mac 上重命名,将寻找 home-brew vs. 谢谢
    • 对于您的问题是重复的问题,已接受的答案包含没有rename 的版本。但是我还是建议安装它,因为它是一个很棒的工具。
    • 这个答案比我的工资等级高一点。我不知道如何将“foo”替换为“foo 和扩展之前的所有其他字符”之类的东西
    • @Dotpage 基本上使用您问题中的命令,但使用$1 而不是$i
    • 找到一个端口来替换重命名:file-nename。最终代码:找到 . -type f -iname '-' -exec 文件重命名 -v 's/-//g' {} \;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2015-01-16
    • 2020-10-20
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    相关资源
    最近更新 更多