Respostas:
Se você usa bash
uma versão recente, pode lucrar com a globstar
opção:
shopt -s globstar
mv **/*.pdf papers/
find /bunchopdfs -name "*.pdf" -exec mv {} /papers \;
Aqui está um teste que eu fiz
$ ls -R
.:
a aaa bbb.pdf pdfs
./a:
foo.pdf
./pdfs:
Observe o arquivo "aaa bbb.pdf".
$ find . -name "*pdf" -exec mv {} pdfs \;
$ ls -R
.:
a pdfs
./a:
./pdfs:
aaa bbb.pdf foo.pdf
"{}"
para lidar com nomes de arquivos que contêm espaços?
find -print0 /directory/with/pdfs -iname "*.pdf" | xargs -0 mv -t /papers
(semelhante a outra resposta, mas eu prefiro pipe / xargs / mv ... mais intuitivo para mim)
Para sua informação, eu fiz o script de uma linha acima com êxito em vários diretórios e vários arquivos pdf.
-print0
à sua localização e -0
ao xargs.
Para a linha de comando do Windows (cmd.exe), você pode usar:
for /F "usebackq delims==" %j IN (`dir /s /b *.pdf`) do copy "%j" c:\target_dir
Se você estiver pesquisando apenas um diretório em profundidade, poderá:
mkdir <destination>
mv */*.pdf <destination>
onde <destination>
significa algum diretório. mv
não criará automaticamente um diretório para você.
a/x.pdf
eb/x.pdf
?