Bunun amacı nedir?
ls
geçerli dizindeki dosyaları listeler
$(ls)
ls
argüman olarak yerlerin çıktısını değiştirirrm
- Esasen
rm $(ls)
mevcut dizindeki tüm dosyaları silmeyi amaçlamaktadır
Bu resimde yanlış olan ne ?
ls
dosya adındaki özel karakterleri düzgün işleyemiyor. Unix kullanıcıları genellikle farklı yaklaşımlar kullanmanızı tavsiye eder . Ayrıca dosya adlarını saymayla ilgili bir soruda da gösterdim . Örneğin:
$ 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
$
Ayrıca, Denis'in cevabında gerektiği gibi belirtildiği gibi, önde gelen tire işaretleri olan bir dosya adı, dosya adının rm
kaldırılması amacını yenen ikame sonrası argüman olarak yorumlanabilir .
Ne çalışıyor
Geçerli dizindeki dosyaları silmek istiyorsunuz. Bu yüzden glob kullanın 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
$
find
Komutu kullanabilirsiniz . Bu araç sık sık geçerli dizinden daha fazlası için önerilir - dizin ağacının tamamını tekrar tekrar kullanabilir ve dosyalar üzerinde-exec . . .{} \;
$ touch "file name"
$ find . -maxdepth 1 -mindepth 1
./file name
$ find . -maxdepth 1 -mindepth 1 -exec rm {} \;
$ ls
$
Python'un dosya adlarında özel karakterlerle sorunu yoktur, bu yüzden bunu da kullanabiliriz (bunun sadece dosyalar için olduğunu, kullanmanız os.rmdir()
ve os.path.isdir()
dizinlerde çalışmak istiyorsanız unutmayın):
python -c 'import os; [ os.remove(i) for i in os.listdir(".") if os.path.isfile(i) ]'
Aslında, yukarıdaki komut ~/.bashrc
kısalık için işlev veya takma ad haline dönüştürülebilir . Örneğin,
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) ]'
}
Bunun Perl versiyonu
perl -e 'use Cwd;my $d=cwd();opendir(DIR,$d); while ( my $f = readdir(DIR)){ unlink $f;}; closedir(DIR)'