Bir dizindeki tüm pdf dosyalarını (ve alt dizinlerini) özyineli olarak tek bir çıktı dizinine nasıl kopyalayabilirim?


20

Bazı alt dizinleri (hangi birkaç katmanları derin uzatabilirsiniz) olan PDF dosyaları çok sayıda içeren bir dizin var. Eşleşen tüm dosyaları *.pdfadlı tek bir çıktı klasörüne taşımak istiyorum papers.

Bunu nasıl yapabilirim?


1
İki dosya a/x.pdfve b/x.pdfnasıl davayı ele almak istersiniz ?
Albay Panik

Yanıtlar:



30
  find /bunchopdfs -name "*.pdf" -exec mv {} /papers \;    

İşte yaptığım bir test

$ ls -R
.:
a  aaa bbb.pdf  pdfs

./a:
foo.pdf

./pdfs:

"Aaa bbb.pdf" dosyasına dikkat edin.

$ find . -name "*pdf" -exec mv {} pdfs \;
$ ls -R
.:
a  pdfs

./a:

./pdfs:
aaa bbb.pdf  foo.pdf

Güzel! +1!
PenguinCoder

"{}"Boşluk içeren dosya adlarıyla başa çıkmak için alıntı yapmanız gerekmez mi?
terdon

@terdon: Aslında hayır, yapmazsınız (bu tür bir sorun bazen beni yakalar). Güncellenmiş cevaba bakınız.
RedGrittyBrick

4
find -print0 /directory/with/pdfs -iname "*.pdf" | xargs -0 mv -t /papers

(başka bir cevaba benzer ancak boru / xargs / mv ... benim için daha sezgisel tercih ederim)

FYI, yukarıdaki tek satırlık betiği birden çok dizin ve birden fazla pdf dosyasında başarıyla yaptım.


1
xargs, -exec'in içermediği "dosya adlarındaki boşluklar" sorununa sahiptir. Bulmanıza -print0ve -0xargs'a argümanlar ekleyerek buna biraz aracılık edebilirsiniz .
Rich Homolka

@RichHomolka değişen cevaba bakınız. (Tavsiye için teşekkürler. Bu gerçekten yararlı!)
Trevor Boyd Smith

Bunu hiç denedin mi? Görünüşe göre find komutunun sonuna "-print0" eklemeniz gerekiyor
tollo

0

Windows komut satırı (cmd.exe) için şunları kullanabilirsiniz:

for /F "usebackq delims==" %j IN (`dir /s /b *.pdf`) do copy "%j" c:\target_dir

1
Merhaba ve SU'ya hoş geldiniz. Cevabınız için teşekkür ederim, ancak soru özellikle linux çözümü istiyor.
terdon

2
Pencerelerin de bunu yapabilmesi hala harika!
Vorac

0

Yalnızca bir dizinin derinliklerini arıyorsanız, şunları yapabilirsiniz:

mkdir <destination>
mv */*.pdf <destination>

burada <destination>bazı dizin anlamına gelir. mvsizin için otomatik olarak bir dizin oluşturmaz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.