【问题标题】:Find directories with names matching pattern and move them查找名称匹配模式的目录并移动它们
【发布时间】:2014-04-14 16:49:09
【问题描述】:

我有一堆目录,例如 001/ 002/ 003/ 与其他名称中包含字母的目录混合在一起。我只想抓取所有带有数字名称的目录并将它们移动到另一个目录中。

我试试这个:

file */ | grep ^[0-9]*/ | xargs -I{} mv {} newdir

匹配部分有效,但最终将所有内容移至newdir...

【问题讨论】:

  • 我更新了我的答案...希望对你有所帮助

标签: regex linux bash shell grep


【解决方案1】:

带有循环和数组,

你的脚本应该是这样的:

#!/bin/bash
DIR=( $(file */ | grep ^[0-9]*/ | awk -F/ '{print $1}') ) 

for dir in "${DIR[@]}"; do
   mv $dir /path/to/DIRECTORY
done

【讨论】:

    【解决方案2】:

    我不确定我是否理解正确,但至少这里有一些帮助。

    结合使用 find 和 xargs 来操作文件列表。

    find -maxdepth 1 -regex './[0-9]*' -print0 | xargs -0 -I'{}' mv "{}" "newdir/{}"
    

    使用-print0-0 并引用替换符号{} 使您的脚本更加健壮。它将处理存在不可打印字符的大多数情况。这基本上说它使用 \0 字符分隔符而不是 \n 传递行。

    【讨论】:

    • @6pool 使用echo 帮助您调试复杂的xargs 命令。像这样... | xargs echo mv ...
    【解决方案3】:

    mv 本身还不够强大。它不适用于模式。

    试试这个方法:Rename multiple files by replacing a particular pattern in the filenames using a shell script

    使用循环或rename 命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 2021-05-13
      • 1970-01-01
      相关资源
      最近更新 更多