find
solução:
find all -type f -name "*.txt" ! -path "all/txt/*" -exec echo mv -t all/txt '{}' \;
Tenho quase 6.000 diretórios com milhares de arquivos:
all/recup_dir.1/1.txt
all/recup_dir.1/2.jpg
...
all/recup_dir.5987/1.txt
all/recup_dir.5987/2.txt
...
e eu quero mover todos os arquivos .txt na pasta all / txt. Eu usei este comando:
mv **/*.txt txt
mas recebo este erro:
bash /bin/mv arg list too long
Como posso fazer?
find
solução:
find all -type f -name "*.txt" ! -path "all/txt/*" -exec echo mv -t all/txt '{}' \;
Talvez tente isso. Para evitar mover arquivos, basta mover para all/txt
, mover
-los para um novo diretório txt
fora de all
, mova txt
sob
%código%. Aqui vamos nós:
$ mkdir txt
O próximo só imprimirá todos os comandos de movimentação. Verifique se você gosta o que você vê:
$ find all | sed -rn 's#^all/recup_dir.([^/]*)/([^/]*).txt$#mv -n "&" "txt/-.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"
...
Quando estiver satisfeito, execute-os anexando all
:
$ find all | sed -rn 's#^all/recup_dir.([^/]*)/([^/]*).txt$#mv -n "&" "txt/-.txt"#p' | sh
depois coloque | sh
onde ele pertence:
$ mv txt all
Tags command-line find files recursive move