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
shopt -s extglob ## needed in bash only
setopt ksh_glob ## needed in zsh only
mv /source/!(*.bak) /destination
akan memindahkan semua file /sourceke /destinationkecuali untuk file yang cocok *.bak. Di zsh, Anda juga dapat menulis /source/^*.bakjika Anda pertama kali menjalankan setopt extended_glob, dan lebih umum (lagi-lagi membutuhkan setopt extended_glob) /source/*~*.bak(atau /source/a*~*.bakuntuk semua file yang namanya dimulai akecuali untuk .bakfile, 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 *.bakdari /sourceke target, dan menambahkan .baknama mereka dalam proses:
autoload zmv
zmv '/source/(*)~*.bak' '/target/$1.bak'
Ada beberapa perintah yang disebut renamemelayang. Di Debian dan Ubuntu, /usr/bin/renameadalah 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 (menggunakan renameprogram khusus ini) memindahkan semua file kecuali *.bakdari /sourceke /target:
rename 's!/source!/target! unless m!\.bak$!' /source/*
Anda dapat menggunakan findperintah untuk memilih file yang ingin Anda pindahkan. Sebagai contoh, perintah berikut memindahkan semua file biasa kecuali *.bakdalam /sourceatau subdirektori ke /target(perhatikan bahwa struktur direktori diciutkan):
find /source -type f \! -name '*.bak' -exec mv {} /target/ \;
atau (lebih efisien jika ada banyak file untuk dipindahkan)
find /source -type f \! -name '*.bak' -exec sh -c 'mv "$@" "$0"' /target/ {} +
rsyncadalah generalisasi dari cpdan scpdengan aturan termasuk / tidak termasuk yang sangat kuat. Sebagai contoh, perintah berikut menyalin semua file kecuali *.bakdalam /sourceatau subdirektori ke /target, dengan menghormati struktur direktori:
rsync -a --exclude '*.bak' /source/ /target/
paxadalah (antara lain) cpsteroid. 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 *.bakdalam /sourceatau subdirektori ke /target, dan mengganti nama file menjadi .baklewat.
cd /source && pax -rw -pp -s '/.*\.bak$//' -s '/$/.bak/' . /target/
Contoh di atas memiliki efek samping yang tidak diinginkan dalam membuat direktori yang disebut foo.bak, yang dapat dihindari dengan menggabungkan finddengan pax:
{ cd /source && find . -type f; } | \
pax -rw -pp -s '/.*\.bak$//' -s '/$/.bak/' /target/
mv file1 file2 /path/to/destinationtidak akan melakukan apa yang Anda inginkan