Apakah ada cara untuk mv
,, cp
atau operasi file apa pun sehingga saya dapat menentukan semua file yang saya tidak ingin terpengaruh?
Misalnya, saya memiliki folder dengan file file1
, file2
dan file3
, dan saya ingin pindah file1
dan file2
di suatu tempat. Daripada secara eksplisit memberi nama file untuk dipindahkan ( mv file1 file2 /path/to/destination
), saya ingin memberi nama file untuk tidak dipindahkan dan semua yang lain di folder dipindahkan ( mv --some-switch file3 /path/to/destination
)
command-line
rename
scp
Meluncur
sumber
sumber
mv file1 file2 /path/to/destination
tidak akan melakukan apa yang Anda inginkanJawaban:
Anda dapat menggunakan pola globbing lanjutan di beberapa shell untuk mencocokkan semua file dalam direktori kecuali untuk mereka yang cocok dengan pola tertentu. Misalnya, dalam ksh, bash atau zsh, perintah
akan memindahkan semua file
/source
ke/destination
kecuali untuk file yang cocok*.bak
. Di zsh, Anda juga dapat menulis/source/^*.bak
jika Anda pertama kali menjalankansetopt extended_glob
, dan lebih umum (lagi-lagi membutuhkansetopt extended_glob
)/source/*~*.bak
(atau/source/a*~*.bak
untuk semua file yang namanya dimulaia
kecuali untuk.bak
file, dll).Zsh memiliki perintah penyalinan / pemindahan / tautan massal yang dapat digunakan, antara lain, untuk memindahkan semua file kecuali untuk yang cocok dengan suatu pola. Misalnya, perintah berikut memindahkan semua file kecuali
*.bak
dari/source
ketarget
, dan menambahkan.bak
nama mereka dalam proses:Ada beberapa perintah yang disebut
rename
melayang. Di Debian dan Ubuntu,/usr/bin/rename
adalah skrip perl yang memindahkan file ke nama baru yang dihasilkan oleh ekspresi perl. Anda dapat mengecualikan file dari penggantian nama dengan tidak menghasilkan nama baru jika file tersebut akan dikecualikan. Misalnya, perintah berikut (menggunakanrename
program khusus ini) memindahkan semua file kecuali*.bak
dari/source
ke/target
:Anda dapat menggunakan
find
perintah untuk memilih file yang ingin Anda pindahkan. Sebagai contoh, perintah berikut memindahkan semua file biasa kecuali*.bak
dalam/source
atau subdirektori ke/target
(perhatikan bahwa struktur direktori diciutkan):atau (lebih efisien jika ada banyak file untuk dipindahkan)
rsync
adalah generalisasi daricp
danscp
dengan aturan termasuk / tidak termasuk yang sangat kuat. Sebagai contoh, perintah berikut menyalin semua file kecuali*.bak
dalam/source
atau subdirektori ke/target
, dengan menghormati struktur direktori:pax
adalah (antara lain)cp
steroid. Aturan pengecualiannya tidak sekuat rsync, tetapi memiliki kemampuan tambahan untuk mengganti nama file saat disalin. Jika Anda mengganti nama file menjadi string kosong, itu dikecualikan dari salinan. Sebagai contoh, perintah berikut menyalin semua file kecuali*.bak
dalam/source
atau subdirektori ke/target
, dan mengganti nama file menjadi.bak
lewat.Contoh di atas memiliki efek samping yang tidak diinginkan dalam membuat direktori yang disebut
foo.bak
, yang dapat dihindari dengan menggabungkanfind
denganpax
:sumber
find
perintah itu harus diakhiri\;
+
segera berikut{}
.