Bir klasördeki her dosya için bash komutu


31

Aynı komutu uygulamak istediğim bir dosya setim var ve çıktı işlenen dosya ile aynı adı içermeli ancak farklı bir uzantıya sahip olmalıdır.

Şu anda /my/data/Andrew.doc ismini /my/data/Andrew.txt olarak değiştiriyorum. Bunu / my / data / klasöründeki tüm .doc dosyalarında yapmak ve adı korumak istiyorum.

Birkaç sürümü denedim ama sanırım yeni bir linux için sözdiziminde bir sorunum var.


→ biraz daha eksiksiz ve pratik bir örnek: stackoverflow.com/a/43474757/444255
Frank Nocke

Yanıtlar:


76

Buna yaklaşmanın en az yüz bin milyon farklı yolu var ama işte en iyi yarışmacılar:

Döngü için Bash

for f in ./*.doc; do
    # do some stuff here with "$f"
    # remember to quote it or spaces may misbehave
done

kullanma find

findKomut güzel küçük sahiptir exec(bazı uyarılar ile) şeyleri çalıştırmak için harika komutu. Bulmak, temel iş dünyasından daha iyidir, çünkü seçtiğiniz dosyaları gerçekten filtreleyebilirsiniz. Garip sözdizimine dikkat edin.

find . -iname '*.doc' -exec echo "File is {}" \;

Not findKullanmak isteyebilirsiniz böylece özyinelemelidir -maxdepth 1tutmak için findgeçerli çalışma dizini. -type fnormal dosyaları filtrelemek için kullanılabilir.

Eğer doktoru txt olarak yeniden adlandırırsak ...

renameKomut Sed-benzeri olduğunu arayan. Açıkçası bu, formatı dönüştürmek için hiçbir şey yapmaz.

rename 's/doc$/txt/' *.doc

22
for i in *.doc ; do mv "$i" $(echo $i | sed s/doc/txt/) ; done
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.