Eu tenho uma pasta grande com subpastas de arquivos pdf. Eu quero pegar todos os arquivos pdf (290 deles) e colocá-los em um diretório. (Achei que seria simples.) para que eu possa concatená-los em um documento com meu programa pdf pdfshuffle, ou algo assim. Eu peguei o caminho e os nomes dos arquivos em um arquivo: out.txt
, usando: find $(pwd) -iname '*.PDF' > out.txt
out.txt contém caminhos e arquivos como este:
...
/home/user/Downloads/pedals/PEDALS/Electro-Harmonix/Small Stone Phaser.PDF
/home/user/Downloads/pedals/PEDALS/Electro-Harmonix/Dr. Quack (Doctor Q Melhorado).pdf
/home/user/Downloads/pedals/PEDALS/Marshall/Guv'Nor 1.PDF
/home/user/Downloads/pedals/PEDALS/Marshall/Guv'Nor 2.pdf
...
legal. então pensei que poderia fazer isso:
#!/bin/bash
input="out.txt"
while IFS= read -r line
do
#echo "$line"
cp $line .
done < "$input"
Mas ele copia apenas cerca de 36 dos pdfs, e o shell diz que não pode stat arquivos:
...
cp: cannot stat 'Boogie/Vtwin.pdf': No such file or directory
cp: cannot stat '/home/user/Downloads/pedals/PEDALS/Mesa': No such file or directory
...
O arquivo está claramente lá, e posso visualizá-lo etc. qual é o problema com meu método ou script?
Manipular nomes de arquivos contendo espaços ou outros caracteres engraçados é feito facilmente, usando
find
exargs
. Leiaman find xargs
e faça algo comopara verificar os comandos, e quando corresponderem às expectativas...
retire o "
echo
" para realmente executar os comandos.