查找名称与pattern匹配的目录并移动它们

时间:2014-03-11 07:58:54

标签: regex linux bash shell grep

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

我试试这个:

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

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

3 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:0)

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

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

使用循环或rename命令。

答案 2 :(得分:0)

使用循环和数组,

您的脚本将是这样的:

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

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