【问题标题】:select folders (not files) with leading "_" (underscore) symbols in terminal在终端中选择带有前导“_”(下划线)符号的文件夹(不是文件)
【发布时间】:2015-01-16 01:44:09
【问题描述】:

我正在尝试遍历给定目录中具有前导下划线的文件夹和子文件夹(仅,不能更改任何文件)并删除那些前导下划线。我打算用一个简单的 shell 脚本来完成这个:

for folder in ./_* do
  mv "$folder" "${folder:1}"
done

上面的脚本还不能正常工作,原因有两个,我试图在这里更正: - 一,“./_*”不能正常工作,要么抛出错误(./_*: No such file or directory),要么选择没有前导下划线的文件夹。 - 二,它不只指定文件夹...mv 命令有一个选项可以做到这一点吗?

谢谢

【问题讨论】:

    标签: regex bash unix sh mv


    【解决方案1】:

    要查找所有以下划线开头的文件夹,请使用find

    find . -type d -name '_*'
    

    并删除_ 使用:

    find . -type d -name '_*' -exec bash -c 'f="$1"; mv "$f" "${f:1}" - {} \;
    

    【讨论】:

      【解决方案2】:

      递归使用

      shopt -s globstar
      
      for dir in **/_*/; do
          mv "$dir" "${dir:1}"
      done
      

      【讨论】:

      • 注意模式中尾随的/,这是从结果中过滤掉非目录的原因。
      猜你喜欢
      • 2020-03-05
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 2016-05-11
      • 2011-03-27
      相关资源
      最近更新 更多