Belirli bir klasördeki belirli bir uzantıya sahip tüm dosyaları nasıl silebilirim?


36

Geçerli / çalışan dizini (kullanarak gezinerek cd) belirli bir dizine ayarladıysam ve şunu yazın:

rm *.xvg

Bu komut ne yapacak? Bu doğru mu yukarıdaki komut olacak sadece uzantılı dosya silme .xvg sadece çalışma dizininde?

Bunu sormadan önce denemek konusunda gergindim, çünkü yukarıdaki komutun sadece ÇALIŞMA YÖNETMENİNDE YERLİ.xvg dosyaları sileceğinden kesinlikle emin olmak istiyorum .

Yanıtlar:


34

Evet, rm *.xvgolacak sadece sizin belirtilen uzantılı dosyaları silmek geçerli dizinde.

Bir iyi yolu emin kullanmaktır gerçekten dosyalarınızı silebilir istediğiniz dizinde bulunan yapmak için pwdbir do ardından geçerli dizini görüntülemek ve edecek komutu lssize bekliyoruz dosyaları bulmak doğrulamak için.

rmKomutu verme konusunda biraz endişeliyseniz , yapabileceğiniz 2 şey vardır:

  1. yazın ls *.xvgdosyalar bu komutla etkilenecek ne bir listesini görmek için.

  2. Çok fazla dosyanız olmadığı sürece , -ikomut satırı anahtarını her zaman için de kullanabilirsiniz rm( cpve için de vardır mv). Kullanmak rm -i *.xvg, silmek için bir sorun olmazsa, her bir dosya için size sorulur, böylece beklemeyeceğiniz hiçbir şeyin silinmediğinden emin olabilirsiniz. (Çok fazla dosyanız olsa sıkıcı olacak :)


1
Ayrıca: rm -f {*.xvg,.*.xvg}Gizli dosyaları da kaldırmak için. Ve rm -R -f {*.xvg,.*.xvg}ayrıca dizinleri kaldırmak için.
Dor

20

Dizine gitmene gerek yok, sadece kullan

rm /some/dir/*.xvg 

Yolda bir yazım hatası veya benzer bir hata yapmanız durumunda, / som / dir öğesinin bulunmadığı durumlarda:

cd /som/dir
rm *.xvg

Geçerli dizindeki tüm .xvg dosyalarını yanlışlıkla siler. İlk komut vermeyecek ve tekrar tekrar cd atmanıza gerek kalmayacak.

Alternatif bir yöntem bulmak kullanmak olacaktır:

find /some/dir/ -maxdepth 1 -type f -name "*.xvg" -delete 

find / some / dir / -maxdepth 1 tipi f-name "* .xvg" -delete benim için çalıştı! Alt dizindeki eşleşen dosyaları silmek için -maxdepth "n" yi kullanın.
Vinay

3

Evet, rm *.xvgyalnızca .xvggeçerli dizinde biten dosyaları siler . İşte nedeni.

Bunun gibi bir komut yazdığınızda, iş kullandığınız kabuk (bash varsayalım) ile komut ikili arasında bölünür.

İkili harfleri yazarak bulabilirsiniz which rm. Bu küçük program, dosya bağlantılarını kaldırma ilgilenir. Bu gibi programlar komut satırından başlatılabilir ve başlatıldığında bir argüman listesini okuyabilir prog arg1 arg2 arg3. Bu durumda, rmsilinecek tam nitelikli dosya adlarının bir listesi olarak yorumlanırlar. Bu nedenle, dosyayı içeren bir dizindeyseniz foo.bar, yazarak delete 'foo.*'sonuçlanır rm: foo.*: No such file or directory. Dosya deseninin etrafındaki tek tırnak işaretlerine dikkat edin, kabuğa, argümanı olduğu gibi iletmesini söylerler.

Ancak rm *.baraynı dizinde yazarsanız dosyayı silecektir. Burada olan, komutları yazmak için kullandığınız program olan kabuğunuzun, argümanları komuta vermeden önce bazı dönüşümler gerçekleştiriyor olmasıdır. Bunlardan birine 'dosya adı genişletme' denir, aksi halde 'globbing' olarak bilinir. Burada bash dosya adı genişletmelerinin bir listesini görebilirsiniz . En yaygın genişletmelerden biri *, geçerli dizindeki dosya adlarına genişletilmiştir.

İş yerindeki dünyaya bakmanın basit bir yolu echo, ona kabuktan geçen tüm argümanları geri basan kullanmaktır . Böylece echo *aynı dizinde yazarak çıkacaktır foo.bar. Yani yazdığınızda rm *.bar, aslında olan, kabuğun argüman listesini genişlettiği ve foo.barardından bunu rmkomuta ilettiğidir.

Kürelemeyi kontrol etmenin bazı yolları vardır. Örneğin bash'ın son sürümlerinde, tekrarlayan genişleme yapacak globstar adlı bir seçeneği açabilirsiniz. Yazma echo **/*.bar, .bartüm alt klasörlerde biten tüm dosyaların bir listesini gösterir . Bu yüzden rm **/*.barglobstar etkinleştirilmiş bash yazmak , alt klasörlerdeki eşleşen tüm dosyaları tekrar tekrar silecektir.


1

Komut:

  rm ./*.pgm

benim için çalışıyor

Komut:

rm *.pgm

hata komutu verir (Lehçe dilinde tercüme edilmiştir):

rm: wrong option - '1'
Use "rm ./-1000.pgm" to delete the file '-1000.pgm'.
Write "rm --help" for information.

içinde

bash --version
GNU bash, wersja 4.4.19(1)-release (x86_64-pc-linux-gnu)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.