Apa yang ingin dilakukan?
ls daftar file dalam direktori saat ini
$(ls)menggantikan keluaran lstempat yang sebagai argumen untukrm
- Pada dasarnya
rm $(ls)dimaksudkan untuk menghapus semua file dalam direktori saat ini
Ada apa dengan gambar ini?
lstidak dapat menangani karakter khusus dengan benar dalam nama file. Pengguna Unix umumnya disarankan untuk menggunakan pendekatan yang berbeda . Saya juga menunjukkan hal itu dalam pertanyaan terkait tentang penghitungan nama file . Contohnya:
$ touch file$'\n'name
$ ls
file?name
$ rm $(ls)
rm: cannot remove 'file': No such file or directory
rm: cannot remove 'name': No such file or directory
$
Juga, sebagaimana disebutkan dengan tepat dalam jawaban Denis, nama file dengan tanda hubung utama, dapat ditafsirkan sebagai argumen rmsetelah penggantian, yang mengalahkan tujuan menghapus nama file.
Pekerjaan apa
Anda ingin menghapus file di direktori saat ini. Jadi gunakan glob rm *:
$ ls
file?name
$ rm $(ls)
rm: cannot remove 'file': No such file or directory
rm: cannot remove 'name': No such file or directory
$ rm *
$ ls
$
Anda bisa menggunakan findperintah. Alat ini sering direkomendasikan untuk lebih dari sekedar direktori saat ini - ini dapat secara rekursif melintasi seluruh pohon direktori, dan beroperasi pada file melalui-exec . . .{} \;
$ touch "file name"
$ find . -maxdepth 1 -mindepth 1
./file name
$ find . -maxdepth 1 -mindepth 1 -exec rm {} \;
$ ls
$
Python tidak memiliki masalah dengan karakter khusus dalam nama file, jadi kami juga dapat menggunakannya (perhatikan bahwa ini hanya untuk file, Anda harus menggunakan os.rmdir()dan os.path.isdir()jika Anda ingin beroperasi pada direktori):
python -c 'import os; [ os.remove(i) for i in os.listdir(".") if os.path.isfile(i) ]'
Bahkan, perintah di atas dapat diubah menjadi fungsi atau alias ~/.bashrcuntuk singkatnya. Sebagai contoh,
rm_stuff()
{
# Clears all files in the current working directory
python -c 'import os; [ os.remove(i) for i in os.listdir(".") if os.path.isfile(i) ]'
}
Versi Perl itu akan menjadi
perl -e 'use Cwd;my $d=cwd();opendir(DIR,$d); while ( my $f = readdir(DIR)){ unlink $f;}; closedir(DIR)'