Sahiplik / izinleri değiştirmeden bir alt dizindeki her dosyanın içeriğini nasıl temizleyebilirim?


2

Gibi bir şey kullanarak dosyaların listesini bulabilirsiniz:

find /path/to/files -type f

Ve tek bir dosyanın içeriğini şunlardan biriyle temizleyebilirim:

> filename

echo -n > filename

cat /dev/null > filename

Çıkış yönlendirmesini içermeyen komutlarla böyle bir şey yapabilirsiniz:

find /path/to/files -type f -exec file '{}' \;

Ancak bu işe yaramıyor:

find /path/to/files -type f -exec echo -n > '{}' \;

Find'leri kullanarak bir komut oluşturuyor -execveya | xargsdosya listesini dosyaları temizleyecek bu komutlardan birine aktarıyor gibi görünmüyorum . Bunu nasıl yapabilirim?

Yanıtlar:


3

find /path/to/files -type f -exec /bin/sh -c "> '{}'" ';'ne istersen yapmalısın; bkz (1) bulabilirsiniz ayrıntılı olarak nasıl exec eserler hakkında ayrıntılı bilgi için, ancak bu çağırma dosya adı koyarak bir kez komutu çalıştırır {}olduğunu.

Ayrıca xargs'a komuta yalnızca tek bir dosya adı geçirmesini veya find /path -type f | while read file; do echo -n > "$file"; donebunu kabuk düzeyinde kullanmak için de söyleyebilirsiniz .


İlk örneğinizin çizgileri boyunca bir şeyler deniyordum ama işe yaramadı. Orijinal sorudaki düzenlememe bakın.
Dave Forgac

Üzgünüm, işe yaramayacağını fark etmeliydim - düşünmedim, sadece sizin örneğinizden kopyaladım. Güncelleme bunun nasıl düzeltileceğini gösterir; tek bir kabuk komutu çağırmak. "| Dosya okunduğunda; yapın" versiyonunun kullanılması da sorunsuz çalışacaktır.
Daniel Pittman,

4

Sadece eğlence için, işte başka bir seçenek:

find /path/to/files -type f -exec dd if=/dev/null of={} \;

Güzel! Yeniden yönlendirmeden kaçınmanın bir yolunu düşünmeye çalışıyordum.
Dave Forgac

1
Bu işe yarıyor! Basit yaklaşım.
Eduardo B.

Bu benim için mükemmeldi.
Hashim

İlgi konusu olmayan şey, of={} ` doing here? I understand dd'nin çıktı dosyasıdır, ancak parantez ve aşağıdaki ters eğik çizgi beni fırlatan şeydir.
Hashim

1
@Hashim Bu {}, bulma işleminin -execbirincil sözdiziminin bir parçasıdır ; temel olarak "buraya filepath / isim koy" anlamına gelir, yani anlarsınız of=path/to/file. Eğik çizgi kabuk aşağıdaki geçmesi yapar ;için findoldukça komutu sona eren bir sınırlayıcı olarak ele değil, bir argüman olarak. Ve ;yine, -execçalıştırılacak komutun sonunu belirten sözdiziminin bir parçasıdır . {}Aynı yöntemi kullanan (ancak farklı bir bağlamda) @ DanielPittman'ın cevabını karşılaştırın ve ;tek tırnak içine alın (kaçış ile aynı etkiye sahip).
Gordon Davisson
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.