Odpowiedzi:
Jeśli korzystasz bash
z najnowszej wersji, możesz skorzystać z globstar
opcji:
shopt -s globstar
mv **/*.pdf papers/
find /bunchopdfs -name "*.pdf" -exec mv {} /papers \;
Oto test, który zrobiłem
$ ls -R
.:
a aaa bbb.pdf pdfs
./a:
foo.pdf
./pdfs:
Zwróć uwagę na plik „aaa bbb.pdf”.
$ find . -name "*pdf" -exec mv {} pdfs \;
$ ls -R
.:
a pdfs
./a:
./pdfs:
aaa bbb.pdf foo.pdf
"{}"
aby zajmować się nazwami plików zawierającymi spacje?
find -print0 /directory/with/pdfs -iname "*.pdf" | xargs -0 mv -t /papers
(podobny do innej odpowiedzi, ale wolę pipe / xargs / mv ... bardziej intuicyjny dla mnie)
Do twojej wiadomości, zrobiłem powyższy skrypt jednowierszowy z powodzeniem w wielu katalogach i wielu plikach pdf.
-print0
do swojego znaleziska i -0
do xargs.
W wierszu polecenia systemu Windows (cmd.exe) można użyć:
for /F "usebackq delims==" %j IN (`dir /s /b *.pdf`) do copy "%j" c:\target_dir
Jeśli przeszukujesz tylko jeden katalog głęboko, możesz:
mkdir <destination>
mv */*.pdf <destination>
gdzie <destination>
oznacza jakiś katalog. mv
nie utworzy automatycznie katalogu dla Ciebie.
a/x.pdf
ib/x.pdf
?