将所有 .txt 文件移至一个目录中

将所有 .txt 文件移至一个目录中

我有近 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新目录,然后移动到下面 。开始了:txtalltxtall

$ 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

相关内容