Default.png adlı dosya dışında bir dizindeki tüm dosyaları kopyalamak istiyorum. Görünüşe göre bunu yapmanın birkaç yolu var. Size en etkili olan nedir?
Default.png adlı dosya dışında bir dizindeki tüm dosyaları kopyalamak istiyorum. Görünüşe göre bunu yapmanın birkaç yolu var. Size en etkili olan nedir?
Yanıtlar:
Basit, src/yalnızca dosya içeriyorsa:
find src/ ! -name Default.png -exec cp -t dest/ {} +
Eğer src/alt dizinleri, bu atlar onları vardır, ancak bunların iç kopya dosyaları yapar:
find src/ -type f ! -name Default.png -exec cp -t dest/ {} +
Eğer src/alt dizinleri vardır, bu onların içine recurse değildir:
find src/ -type f -maxdepth 1 ! -name Default.png -exec cp -t dest/ {} +
\;komutu dosya başına bir kez yürütür. +komutu bir kez çalıştırır ve tüm dosya adlarını bir kerede ona iletir (komut satırı uzunluk sınırına tabidir). +genel olarak biraz daha etkilidir.
Aşağıdaki gibi olmalıdır:
cp -r !(Default.png) /dest
Mevcut klasörde iç içe geçmiş bir klasöre kopyalıyorsanız (aşağıdaki durumda örnek olarak adlandırılır), o dizini de atlamanız gerekir:
cp -r !(Default.png|example) /example
shopt -s extglobDevre dışı bırakılmışsa, bunun çalışması gerekir .
shopt -s extglob@BarryKelly tarafından açıklandığı gibi kullanılması gerektiği anlaşılıyor. Bununla mükemmel çalışıyor.
!()... Güzel! --Like hissetmek bana-- edenlerin özellikle çalışma / inceleme zamanı bash , burada bu soru / cevap ile ilgili alakalı bağlantılar vardır: shopt / extglob ve desen .
rsync, uzun süredir benim cp / scp değişimim oldu:
rsync -av from/ to/ --exclude=Default.png
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
-v, --verbose increase verbosity
-rDizinleri senkronize ediyorsanız argümanı da unutmayın
Sadece yapardım:
cp srcdir/* destdir/ ; rm destdir/Default.png
dosyalar büyük değilse. Aksi takdirde örneğin kullanın
find srcdir -type f/ |grep -v Default.png$ |xargs -ILIST cp LIST destdir/
Default.pngiki dizin var, bu bir tane yerini alacak destdirbirer srcdir, sonra kopyalanan silin Default.png. Bunun yerine, OP Default.pngzaten var olanı korumak istiyor destdir.
Bu, düğüm modülleri hariç her şeyi kopyalamak için harika çalışıyor :) keyfini çıkarın ve yukarıdaki cevaplar sayesinde ona biraz önce ekledim. Bence Rsync, istemeden ilerleme çubuğunu görebileceğiniz için CP'den daha iyidir.
rsync -av fromDirectory/ ToDirectory/ --exclude=node_modules
cp `ls | grep -v Default.png` destdir
# chattr +i /files_to_exclude
# cp source destination
# chattr -i /files_to_exclude
kabuğun genişletme parametresini regex ile kullanın
cp /<path>/[^not_to_copy_file]* .
Not_to_copy_file dışında her şey kopyalanacak
- bunda bir sorun varsa. lütfen belirtiniz !
[...]) eşleşecek bir dizi karakter içerirken, bir satır aralığı ^listelenen karakterlerin tamamlayıcısı ile eşleşmeye neden olur. Aşağıdaki örnekte, ne dosya listelenir: touch not_to_copy_file to_copy_file ; ls [^not_to_copy_file]*Aşağıdaki karakterlerden herhangi başlayarak tüm dosya adları dışlanır çünkü: _cefilnopty.