Linux komut satırında (çok büyük) bir .txtdosya kümesini bir dizinden (ve alt dizinlerinden) diğerine kopyalamak istiyorum .
Sağlam kalabilmek için dizin yapısına ihtiyacım var ve bitenler dışındaki dosyaları yoksaymam gerekiyor .txt.
Linux komut satırında (çok büyük) bir .txtdosya kümesini bir dizinden (ve alt dizinlerinden) diğerine kopyalamak istiyorum .
Sağlam kalabilmek için dizin yapısına ihtiyacım var ve bitenler dışındaki dosyaları yoksaymam gerekiyor .txt.
Yanıtlar:
Başka bir yaklaşım
find . -name '*.txt' -exec rsync -R {} path/to/dext \;
find . -iname '*.txt' -exec rsync -Rptgon {} path/to/dext \;duyarsız bir eşleşme yapardım, sahiplik ve izinlerin korunmasını yapardım.
peki ya ilk kopyalamayı bitsin
cp -r /old/folder /new/folder
sonra yeni klasöre gidin ve çalıştırın
find . -type f ! -iname "*.txt" -delete
ya da sadece
cp -r /old/folder /new/folder && find . -type f ! -iname "*.txt" -delete
Düzenleme: Tamam, filtreleyen bir komut istiyorum (Bunu sistemde cpiokomut olmadığı için test etmedim !). İşte bulduğum yer: http://www.gnu.org/software/findutils/manual/html_mono/find.html#Copying-A-Subset-of-Files
find . -name "*.txt" -print0 |
cpio -pmd0 /dest-dir
Lütfen önce bunu test edin, çünkü henüz denemedim. Biri doğrularsa, harika olurdu.
0in -pmd0ve eklemek -print0sonuna find(hemen önce komuta |).
MacOS'ta da aynı şeyi yapmaya çalışıyordum, ancak seçeneklerin hiçbiri benim için işe yaramadı. Keşfetene kadar ditto.
Birçok .wav dosyasını kopyalamak zorunda kaldım ve Video dosyalarını atlatmasını sağladım ... İşte burada buldum:
find . -type f -iname "*.wav" -ls -exec ditto {} /destination/folder/{} \;
find .- Geçerli klasördeki bulmayı çalıştırır. cd /source/folderbaşlamadan önce emin ol
-type f - Yalnızca dosyaları aramayı belirtir
-iname "*.wav" - Bu, büyük / küçük harfe duyarsız * .wav aramasını söyler-ls- Bu, üzerinde çalıştığı dosyayı gösterir. Aksi takdirde hiçbir şey göstermez.-exec ditto {} /destination/folder/{} \; - Aynı dizin ağacına sahip dosyaları kopyalayıp oluşturma işini yapar.