Move todos os arquivos .txt para um diretório [duplicado]

0

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?

    
por xRobot 03.04.2018 / 15:18

2 respostas

1

find solução:

find all -type f -name "*.txt" ! -path "all/txt/*" -exec echo mv -t all/txt '{}' \;
    
por 03.04.2018 / 15:28
0

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
    
por 04.04.2018 / 16:48