我有近 6000 个目录,其中包含数千个文件:
all/recup_dir.1/1.txt
all/recup_dir.1/2.jpg
...
all/recup_dir.5987/1.txt
all/recup_dir.5987/2.txt
...
我想移动 all/txt 文件夹中的所有 .txt 文件。我用过这个命令:
mv **/*.txt txt
但我收到此错误:
bash /bin/mv arg list too long
我能怎么做?
答案1
find
解决方案:
find all -type f -name "*.txt" ! -path "all/txt/*" -exec echo mv -t all/txt '{}' \;
答案2
也许试试这个。为了避免移动刚刚移动到的文件,请将它们移动到外部的all/txt
新目录,然后移动到下面 。开始了:txt
all
txt
all
$ mkdir txt
下一篇只会打印所有移动命令。检查您是否喜欢所看到的内容:
$ find all | sed -rn 's#^all/recup_dir.([^/]*)/([^/]*).txt$#mv -n "&" "txt/\1-\2.txt"#p'
mv -n "all/recup_dir.20/2.txt" "txt/20-2.txt"
mv -n "all/recup_dir.20/1.txt" "txt/20-1.txt"
mv -n "all/recup_dir.19/5.txt" "txt/19-5.txt"
mv -n "all/recup_dir.19/4.txt" "txt/19-4.txt"
...
满意后,通过附加以下内容来运行它们| sh
:
$ find all | sed -rn 's#^all/recup_dir.([^/]*)/([^/]*).txt$#mv -n "&" "txt/\1-\2.txt"#p' | sh
然后把它放在txt
它所属的地方:
$ mv txt all