Jadi, Anda dapat menggunakan *sebagai kartu liar untuk semua file saat menggunakan cpdalam konteks direktori. Apakah ada cara untuk menyalin semua file kecuali xfile?
Jadi, Anda dapat menggunakan *sebagai kartu liar untuk semua file saat menggunakan cpdalam konteks direktori. Apakah ada cara untuk menyalin semua file kecuali xfile?
Jawaban:
Di dalam bashAnda dapat menggunakan extglob:
$ shopt -s extglob # to enable extglob
$ cp !(b*) new_dir/
di mana !(b*)mengecualikan semua b*file.
Anda nanti dapat menonaktifkan extglobdengan
$ shopt -u extglob
findadalah satu-satunya cara di tcsh:find . -maxdepth 1 ! -name "exclude*" -exec cp -t destination {} \+
Rsync menangani ini dengan baik.
Contoh salin semua: rsync -aP /folder1/* /folder/2
Contoh salin semua dengan pengecualian: rsync -aP --exclude=x /folder1/* /folder2/
The -aPswitch:
a: Mirip dengan cp -a, rekursif, dll. P: Menampilkan kemajuan, fitur bagus dari rsync.
-rPalih-alih -aPjika Anda ingin berulang. -aadalah untuk pengarsipan. Tidak yakin apakah ini berubah atau hanya berbeda pada MacOS.
rsyncmemang memiliki opsi untuk membuatnya rekursif. Contoh: rsync --recursive -P --exclude=x /folder1/* /folder2/. (Diuji hanya pada Ubuntu)
Ini bukan fitur dari cp, itu fitur shell Anda (itu memperluas *berarti semua file non-dot), jadi jawabannya tergantung pada shell yang Anda gunakan. Misalnya, zshmendukung sintaks ini:
$ cp ^x /path/to/destination
Dimana ^xartinya "semua file kecuali x"
Anda juga dapat menggabungkan pola seleksi dan de-seleksi, misalnya untuk menyalin semua file wav kecuali yang mengandung xyz, Anda dapat menggunakan:
cp *.wav~*xyz*
bash?
Dapat juga dilakukan dalam shell bourne biasa (portabel / kompatibel) dalam berbagai cara dengan alat standar dalam cara yang jauh lebih elegan daripada menggunakan globbing shell canggih atau perintah dengan opsi built-in-exclusion.
Jika tidak ada terlalu banyak file (dan tidak dengan nama termasuk spasi dan / atau linebreak), ini bisa menjadi caranya:
cp `ls | egrep -v '^excludename$'` destdir/.
Tentu, bashdan alat-alat GNU hebat dan kuat, tetapi mereka tidak selalu tersedia. Jika Anda bermaksud memasukkannya ke dalam skrip portabel, saya akan merekomendasikan findseperti dalam komentar oleh Rush.
Jika Anda ingin menyalin semua yang ada di folder (termasuk subfolder) ke sub-direktori tertentu:
cp -R $(ls | grep -v '^subdir$') subdir/
Bekerja dengan sh, bash, zsh (setidaknya).
cp -R * subdir/
cp(bukan dari bash/ sh), " cp: cannot copy a directory, ‘subdir’, into itself, ‘subdir/subdir’". Salinan tidak lengkap dengan benar. Sayangnya varian Anda rusak dengan nama file yang mengandung tanda baca spasi atau shell-sensitive. Lihat unix.stackexchange.com/q/128985/135943
extglob adalah cara terbaik sejauh ini kurasa.
Cara lain menggunakan
cp $(ls --ignore=x) subdir/
$dll.) Jangan pernah parsing output dari ls. unix.stackexchange.com/q/128985/135943