我有一堆目录,例如001/
002/
003/
与其他名字中包含字母的目录混在一起。我只是想用数字名称获取所有目录并将它们移动到另一个目录中。
我试试这个:
file */ | grep ^[0-9]*/ | xargs -I{} mv {} newdir
匹配部分有效,但最终会将所有内容移至newdir
...
答案 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