Belirli dosyaları kopyalayın ve alt klasör yapısını koruyun


2

Birkaç alt klasörde farklı eklere sahip çok sayıda dosya içeren bir klasör aldım.

Benim otomatikleştirici iş akışım aşağıdaki gibi çalışır:

  1. Finder Ürünleri İsteyin
  2. Klasör İçeriğini Al (alt klasör seçeneği işaretli)
  3. Bulucu Öğeleri Filtrele (belirli bir dosya soneki için)
  4. Bulucu Öğeleri Kopyala

Bu bir cazibe gibi çalışır. Ancak tüm dosyalar aynı kök hedef klasöre kopyalanır. Alt klasör yapısını korumam gerekiyor. Örneğin:

sourceFolder
    subfolderA
        fileA.jpg
        fileB.xls
        fileC.xls
    subfolderB
        fileC.jpg
        fileD.xls
        fileE.xls

Beklenen sonuç (dosya soneki .xls için filtre):

destinationFolder
    subfolderA
        fileB.xls
        fileC.xls
    subfolderB
        fileD.xls
        fileE.xls

Mevcut sonuç:

destinationFolder
    fileB.xls
    fileC.xls
    fileD.xls
    fileE.xls

Güncelleme

Ben bir geliştiriciyim. Yani bir kabuk veya AppleScript de kabul edilecektir. :)

Yanıtlar:


3
rsync -avh --include='*/' --include='*.xls' --exclude='*' path/to/sourceFolder/ path/to/destinationFolder

Not /kaynak yolunun sonunda, bu kadar önemli . Bu çözüm tüm boş dizinleri ekler, istemiyorsanız seçeneğe bakın --prune-empty-dirs.

Ayraç genişlemesiyle, bir seferde, bir kerede daha fazla dosya türü ekleyebilirsiniz

--include='*.xls' --include='*.pdf' --include='*.txt'

kullanabilirsiniz

--include='*.'{xls,pdf,txt}

harika. ty! test edip tekrar geleceğim.
Tino Rüb

İstediğiniz tüm seçenekleri ekleyebilirsiniz, önemli kısmı içerir – hariç tutulanlar: tüm dizinleri (özyinelemede gerekli olan) ve tüm .xlsdosyaları içerir, daha sonra her şeyi hariç tutar. Daha fazla şey istiyorsanız, --deletebunları emrinize ekleyin.
Manuel

1

İstenildiği gibi çalışan bir kabuk betiği ile bitirdim:

$ find ./sourceFolder -name "*.xls*" -type f -print0 | xargs -0 -I '{}' /usr/bin/rsync -avR "{}" "./destinationFolder/"

rsync -avh --include='*/' --include='*.xls' --exclude='*' sourceFolder/ destinationFolder? Ayraç genişletme ile gerçekte daha fazla dosya türü ekleyebilirsiniz --include='*.'{xls,pdf,txt}.
Manuel

@Manuel ty! Çözümünüzün avantajları / dezavantajları?
Tino Rüb

Borularla birleştirmediğiniz için, yalnızca bir rsynckez uygun bayrakları kullanın.
Manuel

0

Bir kabuk betiğinde, kopyalamak istediğiniz dosyaların bir listesini içeren bir malzeme listesi (malzeme listesi) dosyası oluşturmak için mkbom kullanabilirsiniz. Daha sonra, BOM dosyasında listelenen dosyaları kopyalamak için --tom komutuyla ditto komutunu kullanabilirsiniz.


ty! Çözümünüzün avantajları / dezavantajları?
Tino Rüb
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.