【问题标题】:How to run a command recursively on all files except for those under .svn directories如何在除 .svn 目录下的所有文件上递归运行命令
【发布时间】:2011-01-14 17:50:07
【问题描述】:

这是我在所有文件上递归运行 dos2unix 的方法:

find -exec dos2unix {} \;

我需要更改什么以使其跳过 .svn/ 目录下的文件?

【问题讨论】:

    标签: bash unix shell find


    【解决方案1】:

    在 bash 中

    for fic in **/*; dos2unix $fic
    

    在 zsh 中甚至更好

    for fic in **/*(.); dos2unix $fic
    

    【讨论】:

    • 如何跳过.svn/ 目录?
    • 如果 dotglob 关闭,它将跳过隐藏文件。但是其他隐藏文件也会被跳过,我认为这不是 OP 想要的。
    • 哎呀,对不起!对于 {,.}(N) 中的根;做 [[ $root = .svn ]] && 继续;对于 $root/**/*(.) 中的 fic; dos2unix $fic ;完毕 ;可以,但现在 find 版本更好...
    • +1。谢谢。为我工作。我不必担心 svn 文件。 for plfile in *.pl; do dos2unix $plfile; done; for plfile in **/*.pl; do dos2unix $plfile; done;
    【解决方案2】:

    只是提供一个额外的提示:如果过滤程序接受多个参数,通过 xargs 管道而不是使用 find 的 -exec 选项将提高性能,因为这将减少 fork() 的数量的,所以:

    找到 | xargs dos2unix

    一个警告:如果任何文件名包含空格,通过 xargs 的管道将严重失败。

    【讨论】:

    • find ... -print0 | xargs -0 ... 处理带有空格的文件名。
    【解决方案3】:
    find . -path ./.svn -prune -o -print0   | xargs -0 -i echo dos2unix "{}" "{}"
    

    如果你有 bash 4.0

    shopt -s globstar
    shopt -s dotglob
    for file in /path/**
    do
      case "$file" in
        */.svn* )continue;;
      esac
      echo dos2unix $file $file
    done
    

    【讨论】:

    • 将 -path ./.svn 更改为 -path '*/.svn' 应该可以修复它。
    • -i 已弃用,请改用-I{}。另外,为什么要两个"{}"
    【解决方案4】:

    实际测试解决方案:

    $ find . -type f \! -path \*/\.svn/\* -exec dos2unix {} \;
    

    【讨论】:

      【解决方案5】:

      这是一个通用脚本,您可以根据需要在其中更改最后一行。 我从我的findrepo 脚本中获取了这项技术:

      repodirs=".git .svn CVS .hg .bzr _darcs"
      for dir in $repodirs; do
          repo_ign="$repo_ign${repo_ign+" -o "}-name $dir"
      done
      
      find \( -type d -a \( $repo_ign \)  \) -prune -o \
           \( -type f -print0 \) |
      xargs -r0 \
      dos2unix
      

      【讨论】:

        猜你喜欢
        • 2021-07-20
        • 2010-10-06
        • 1970-01-01
        • 2020-03-18
        • 2014-07-04
        • 2014-12-22
        • 2014-05-23
        • 2012-10-01
        • 2018-07-03
        相关资源
        最近更新 更多