Dizin ağacındaki tüm * .foo öğelerini kaldırın


Yanıtlar:


9

Kullanabilirsiniz find:

find -name '*.foo' -delete

Bu işe yarar mı? olmamalı mıydı find . -name?
Rob,

1
@Rob, man find: hayır yolları verilirse, geçerli dizin kullanılır .
cYrus

@cYrus bul gerçekten çok güçlü. : Muhtemelen uygulanması kolaydır iki eylemi yoksun -callso youraction.so ve -cfunc foo.c . Paylaşılan nesnenin sadece void doIt (const char * path) işlevini dışa aktarması gerekir. Bu gerçekten güçlü olurdu .
user877329

@ user877329, -execbu amaç için kullanılabilecek eylem var.
cYrus

1
@ user877329, amacınızı anlıyorum, ancak deneyimlerime göre bu araçlar işleri hızlı ve kolay bir şekilde yapmak için iyidir, ancak doğru yapmanız gerekiyorsa, o zaman kendi aracınızı geliştirmeye başlamanız gerekir.
cYrus

4

Oldukça yeni bir bash sürümünüz olduğunu varsayalım:

shopt -s globstar
rm -- **/*.foo

2
Zsh ile aynı, ancak mağazaya ihtiyacınız yok.
Stéphane Gimenez

1

Find kullanarak deneyebilirsiniz:

find /dir/path -name *.foo -exec rm -f {} \;

3
Gerekmiyor *.fooolmak '*.foo'?
Timtech

0

En kolay çözümlerden biri, find komutunu şu execparametreyle kullanmak olacaktır :

find /path/where/to/start/search -type f -name "*.foo" -exec rm {} \;

Bu * .foo adındaki tüm dosyaları arayacak ve her biri için rm {dosyaadı} yapacaktır.

Çok fazla dosyanız varsa, xargskomutun kullanımı daha hızlı olabilir:

find /path/where/to/start/search -type f -name "*.foo" | xargs rm 

Bu, tüm dosyaları bulur ve dosya adlarını rm komutunun arkasına koyar, dağıtımınızın / kabuğunuzun destekleyeceği komutun maksimum uzunluğuna kadar, bu nedenle çalıştırdığınızda şunu yaparsınız:

rm dir1/file1.foo dir1/file2.foo dir1/file3.foo 

Tahmin edebileceğiniz gibi, rmikili sistemin daha az başlatılması gerekiyor, bu da daha hızlı bir seçenek haline geliyor.


2
Emin olmak için, ben yerine öneririm | xargsile -print0 | xargs -0. Varsayılan olarak, xargs girişini, herhangi bir dosya veya dizin adında boşluk varsa, istenmeyen sonuçlar doğurabilecek herhangi bir beyaz alana böler. Ekstra anahtarlar, find ve xmarks işlevlerinin dosya adlarında izin verilmeyen boş baytları, bunun yerine ayırıcı olarak kullanır.
Ilmari Karonen

Ben sadece -delete bayrağını kullanırdım.
Rob,

Bulma sürümlerinin tümü -delete bayrağını içermez (örneğin, Solaris <11'de), bu nedenle xargsya -execda kullanmak daha evrenseldir.
Aralık'ta
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.