Se você usar bash
em uma versão recente, poderá lucrar com a opção globstar
:
shopt -s globstar
mv **/*.pdf papers/
Eu tenho um diretório contendo um grande número de arquivos PDF, alguns dos quais estão em subdiretórios (que podem estender várias camadas). Gostaria de mover todos os arquivos correspondentes a *.pdf
para uma única pasta de saída chamada papers
.
Como posso fazer isso?
find /bunchopdfs -name "*.pdf" -exec mv {} /papers \;
Aqui está um teste que 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
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)
FYI, eu fiz o script de uma linha acima com sucesso em múltiplos diretórios e múltiplos arquivos pdf.
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ê está pesquisando apenas um diretório, você pode fazer:
mkdir <destination>
mv */*.pdf <destination>
onde <destination>
significa algum diretório. mv
não criará automaticamente um diretório para você.
Tags command-line linux