जवाबों:
यदि आप bashहाल के संस्करण में उपयोग करते हैं , तो आप globstarविकल्प से लाभ उठा सकते हैं :
shopt -s globstar
mv **/*.pdf papers/
find /bunchopdfs -name "*.pdf" -exec mv {} /papers \;
यहाँ एक परीक्षण मैंने किया है
$ ls -R
.:
a aaa bbb.pdf pdfs
./a:
foo.pdf
./pdfs:
फ़ाइल को "आबा 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
(एक अन्य उत्तर के समान लेकिन मैं पाइप / xargs / mv पसंद करता हूं ... मेरे लिए अधिक सहज है)
FYI करें, मैंने उपरोक्त एक-लाइन स्क्रिप्ट को सफलतापूर्वक कई निर्देशिकाओं और एकाधिक पीडीएफ फाइलों पर किया।
-print0अपने खोज और -0xargs में args जोड़कर इसे कुछ हद तक मध्यस्थता कर सकते हैं ।
Windows कमांड लाइन (cmd.exe) के लिए, आप उपयोग कर सकते हैं:
for /F "usebackq delims==" %j IN (`dir /s /b *.pdf`) do copy "%j" c:\target_dir
यदि आप केवल एक निर्देशिका को गहराई से खोज रहे हैं, तो आप ऐसा कर सकते हैं:
mkdir <destination>
mv */*.pdf <destination>
जहां <destination>कुछ निर्देशिका के लिए खड़ा है। mvस्वचालित रूप से आपके लिए एक निर्देशिका नहीं बनाएगा।
a/x.pdfऔरb/x.pdf?