'Rm dosyaları *' tüm alt dizinlerdeki tüm eşleşmeleri kaldırır mı?


13

wordpress-891.sqlGeçerli dizinden (alt dizinlerin içinde değil) benzeyen herhangi bir dosyayı kaldırmak istiyorum .

rm wordpress-*.sqlHile yapacak mı yoksa alt dizinlerdeki eşleşmeleri de kaldıracak mı?


1
Bir kenara, diğer tüm cevaplar doğru sonuçlanırken, bir bükülme daha var: joker komutunu genişleten rm komutu değil, aslında bash. Dizininizde eşleşen on dosyanız varsa, rm joker karakteri değil, on bağımsız değişkeni görecektir. Rm'nin genişletmeyi yapmasını istiyorsanız, argümanınızı tek tırnak içine almanız gerekir. Rm için, bir fark yaratmaz, ancak diğer bazı bağlamlarda olabilir. Genellikle, joker karakter apt-get paketleri gibi dosyalardan başka bir şeye başvurduğunda.
Kevin Keane

3
@KevinKeane, rmdosya adı genişletme yapmaz ... rm "foo*"adında tam bir yıldız işareti olan bir dosyayı kaldırmaya çalışır.
ilkkachu

Yanıtlar:


20

Hayır. Normal globbing *yinelemeli değildir ve ikisi de değildir rm.

Bir dizin adı eşleşirse, kaldırılmaz - -rbir dizini silmek için bayrağa ihtiyacınız vardır .

Bu nedenle, bu dosyaları silmek istediğinizden eminseniz bunu yapmak güvenlidir.

Ayrıca rminteraktif yapabilirsiniz

rm -i wordpress-*.sql

her dosyayı silmeden önce onay isteyecektir


14

Evet sizin için hile yapar ve geçerli dizinde bu şema ile tüm dosyaları kaldırır. Ve HAYIR, alt dizinlerdeki dosyaları kaldırmaz.

Şöyle bir komut çalıştırdığınızda ne olacağından emin değilseniz:

rm wordpress-*.sql

sonra şunu kullanarak çalıştırın ls:

ls wordpress-*.sql

çıktıda gördüğünüz dosyalar kaldırılacaklardır.

Gibi bir liste almaya çalıştığınızda foo*, vb. Adlı bir dizine sahip dosyaları listelemeyi önlemek için -danahtarını kullanmak daha iyidir .lsfoobar/

ls -d foo*

Bu hile, işi tekrarlı olarak yapmak için kullanılmayan komutlar için çalışır.

Yapabileceğiniz diğer şey, istediğiniz girişi yazmaktır, örneğin: wordpress-*sonra Ctrl+ Alt+ tuşlarına basın *ve şimdi tüm eşleşmeler otomatik olarak komutunuzun önüne yazılır.


4
En sevdiğim yöntem:printf "%s\n" wordpress-*.sql
wjandrea

1
Ayrıca Yankı gibi davranabilirsiniz echo rm file*. Özellikle gibi düşmanca dosya adları arayın-rf
eckes

@eckes: Bunları daha güvenli bir şekilde rm ./*veya ile kaplayabilirsiniz rm -- *.
David Foerster

Evet veya xargs -0@DavidFoerster kullanın
eckes

Eğer giderseniz ls foo*ve adlı bir dizin olması foobar, ayrıca bu kadar sade bir bu dizinin içeriğinin listeleme olsun lsgerçekten ne en iyi yol değildir rmvuracak
ilkkachu

12

Hayır, rmalt dizinlerle geri çekilmez.

Alt dizinlerdeki dosyaları silme yöntemleri için bkz . Tüm alt dizinlerdeki eşleşen dosyaları silme - SuperUser .

Önemli bir şeyi yanlışlıkla silme konusunda endişeleriniz varsa, gvfs-trash(dosyaları rmkalıcı olarak silen ) yerine (dosyaları çöp kutusuna gönderir) kullanın .


Söz için teşekkürler gvfs-trashbugün bir şey öğrendim neredeyse ...
George Udosen

-1

Gibi tüm eşleşen dosyaları bulmak ve silmek wordpress-*.sqlistiyorsanız, findkomutunu kullanabilirsiniz . :)

Örneğin , aşağıdaki gibi tüm wordpress-*.sqlunder ile eşleşen dosyaları kaldırmak test_diristersiniz.

cd test_dir
find . -name "wordpress-*.sql" -exec rm -f {} \;

Her ne zaman findbir program gerçekten eşleşen bir dosya bulduğunda, bu sonra aşağıdaki komutlar için çalışır -execseçeneği. Bu durumda rm -f {}yürütülür ve {}eşleşme dosyası adına değiştirilir. Örneğin

rm -f wordpress-169.sql

-maxdepthSeçenekle birlikte alt dizinlerin derinliğini de ayarlayabilirsiniz .

cd test_dir
find . -maxdepth 3 -name "wordpress-*.sql" -exec rm -f {} \;

-maxdepthDiğer seçeneklerden önce seçeneği belirtmeniz gerektiğini lütfen unutmayın . Aksi takdirde, gerçekten görmek istemediğiniz sonuçlarla karşılaşabilirsiniz.


1
OP tam tersini istiyor: alt dizinlere geri dönmemek.
Melebius

2
GNU find: "seçenekler, seçeneklerden önce belirtilen testler de dahil olmak üzere tüm testleri etkiler", aşağıdaki seçeneklerin listesini içerir -maxdepth. Sadece -exec rm -f {} +yerine -exec \;ya da daha iyisi kullanın-delete
ilkkachu
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.