Apa yang ingin dilakukan?
ls
daftar file dalam direktori saat ini
$(ls)
menggantikan keluaran ls
tempat yang sebagai argumen untukrm
- Pada dasarnya
rm $(ls)
dimaksudkan untuk menghapus semua file dalam direktori saat ini
Ada apa dengan gambar ini?
ls
tidak 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 rm
setelah 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 find
perintah. 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 ~/.bashrc
untuk 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)'