Bagaimana saya bisa memindahkan semua file kecuali satu? Saya mencari sesuatu seperti:
'mv ~/Linux/Old/!Tux.png ~/Linux/New/'
di mana saya memindahkan barang lama ke barang baru kecuali folder Tux.png
. ! -sign mewakili negasi. Apakah ada alat untuk pekerjaan itu?
Masukkan yang berikut ini ke .bashrc Anda
Itu meluas regex. Anda kemudian dapat memindahkan semua file kecuali satu per satu
Pengecualian terkait dengan perintah lain
Perhatikan bahwa, dalam menyalin direktori, blitz-maju tidak dapat digunakan dalam nama seperti yang terlihat di utas Mengapa extglob kecuali melanggar kecuali kondisi? :
jadi
Backups.backupdb/
salah di sini sebelum negasi dan saya tidak akan menggunakannya baik dalam memindahkan direktori karena risiko menggunakan salah maka gumpal dengan perintah lain dan kemungkinan pengecualian lainnya.sumber
mv !(arc*) archive_190629b
Saya akan pergi dengan cara tradisional & xargs:
-maxdepth 1
membuatnya tidak mencari secara rekursif. Jika Anda hanya peduli tentang file, Anda bisa mengatakannya-type f
.-mindepth 1
membuatnya tidak menyertakan~/Linux/Old
jalan itu sendiri ke dalam hasilnya. Bekerja dengan nama file apa pun, termasuk yang berisi baris baru yang disematkan.Satu komentar mencatat bahwa
-t
opsi mv mungkin merupakan ekstensi GNU. Untuk sistem yang tidak memilikinyasumber
Cara cepat adalah dengan memodifikasi nama file tux sehingga perintah pindah Anda tidak akan cocok.
Sebagai contoh:
sumber
Saya pikir cara termudah untuk dilakukan adalah dengan backticks
Edit:
Gunakan backslash dengan ls sebagai gantinya untuk mencegah menggunakannya dengan alias, yaitu sebagian besar ls disebut sebagai ls --color.
Terima kasih @Arnold Roa
sumber
grep -v
sana?Untuk bash, jawaban pertama benar. Berikut ini sintaks zsh (shell pilihan saya):
Membutuhkan
EXTENDED_GLOB
opsi shell untuk diatur.sumber
Saya menemukan ini menjadi sedikit lebih aman dan lebih mudah untuk diandalkan untuk gerakan sederhana yang mengecualikan file atau direktori tertentu.
sumber
-l
pilihan untukls
akan mencakup banyak info yang tidak relevan pada baris perintah dan mengakibatkan kegagalan perintah mv.Berikut ini bukan metode yang dijamin 100%, dan tidak boleh dicoba sama sekali untuk skrip. Tetapi beberapa kali itu cukup baik untuk penggunaan shell interaktif cepat. File file glob suka
(yang akan cocok dengan semua file dengan nama yang dimulai dengan a, b atau c) dapat dinegasikan dengan memasukkan karakter "^" terlebih dahulu, yaitu
Saya terkadang menggunakan ini untuk tidak cocok dengan direktori "lost + found", seperti misalnya:
Tentu saja jika ada file lain dimulai dengan l saya harus memprosesnya setelah itu.
sumber
Perintah find mencantumkan semua file biasa dan perintah fgrep menyaring semua Tux.png. Backticks memberitahu mv untuk memindahkan daftar file yang dihasilkan.
sumber
Bagaimana kalau Anda memindahkan semua yang ada di folder dan kemudian hanya memindahkan Tux.png kembali?
Saya tidak bisa memikirkan sintaks shell untuk mengatakan "semuanya kecuali ..." begitu saja.
sumber
sumber
ls ~/Linux/Old/ | grep -v Tux.png | xargs -I{} mv {} ~/Linux/New/
bekerja sebagai gantinya.Bagaimana tentang:
Anda harus berada di folder.
sumber
Orang dapat melewati grep seperti ini:
sumber
Ini bisa lebih sederhana dan mudah diingat dan itu bekerja untuk saya.
mv $(ls ~/folder | grep -v ~/folder/exclude.png) ~/destination
sumber