Ketika saya menggunakan kode di bawah ini di terminal Ubuntu, itu berfungsi dengan baik:
rm !(*.sh) -rf
Tetapi jika saya menempatkan kode baris yang sama dalam skrip shell (clean.sh) dan menjalankan skrip shell dari terminal, itu melemparkan kesalahan:
skrip clean.sh:
#!/bin/bash
rm !(*.sh) -rf
Kesalahan yang saya dapatkan:
./clean.sh: line 2: syntax error near unexpected token `('
./clean.sh: line 2: `rm !(*.sh) -rf'
Bisakah kamu menolong?
command-line
bash
scripts
rm
Tal
sumber
sumber
Jawaban:
rm !(*.sh)
adalahextglob
sintaks yang berarti menghapus semua file kecuali yang memiliki.sh
ekstensi.Dalam
bash
instance interaktif Anda , opsi shellextglob
aktif:Sekarang saat skrip Anda berjalan dalam subkulit, Anda harus mengaktifkannya
extglob
dengan menambahkan ini di awal skrip:Jadi skrip Anda terlihat seperti:
EDIT:
Untuk menghapus semua file kecuali yang
.sh
ekstensi gunakanGLOBIGNORE
(karena Anda tidak ingin mengaktifkanextglob
):Contoh:
sumber
shopt -s extglob
?Ok, ini postingan silang, tetapi saya harus menulis jawaban. ;)
Anda bisa menggunakannya
find
sebagai gantinyasumber
Anda harus menghidupkan
extglob
:sumber
man bash
. Ini memungkinkan globbing diperpanjang seperti!(...)
.shopt -s extglob