Xargs argümanı '>' ile başka bir komuta dize olarak iletilsin mi?


9

Diyelim ki içinde bir sürü dosya var /tmp/.

Yaparım

find . -type f | xargs -iFILES

Ve md5sumher dosyada aynı ada sahip, ancak .md5uzantısı olan bir dosyaya çıktı almak istiyorum .

find . -type f | xargs -iFILES md5sum FILES > FILES.md5

Bunun find komutuyla bulunan her dosya için bir md5 dosyası oluşturması gerekir. Bunun yerine, tüm dosyalardan sağlama toplamı içeren tek bir FILES.md5 dosyası oluşturur.

Md5sum komutuna FILES'in geçerli dosya adını temsil ettiğini ve FILES değişmez dizesini değil nasıl söyleyebilirim?

Yanıtlar:


4

md5sumBir dosyanın çıktısını göndermek istediğinizi söylemek için bir yol gerekir . Yana find(veya xargs) bu işlevsellik yerleşik var ve yok md5sumsadece standart çıkışa yazdırmak bilen, bir kabuk yönlendirme en basit yoludur.

Komutunuzun başka bir nedenle genel durumda çalışmadığını unutmayın: çıktı biçimi find, girdi biçimi değil, xargsboşluk veya içeren dosya adlarıyla farklılık gösterir \"'. find -execBunun yerine kullanın .

find . -type f -exec sh -c 'md5sum "$0" >"$0.md5"' {} \;

7

IO yönlendirmesini işlemek için bir alt kabuk kullanmanız gerekir:

find . -type f | xargs -iFILES sh -c 'md5sum FILES > FILES.md5'

5

GNU Parallel ile şunları yapabilirsiniz:

find . -type f | parallel md5sum {} \> {}.md5

Md5sum'u paralel olarak çalıştırmanın ek avantajını elde edersiniz.

My brother's 12" records.txt

komutunuzun çökmesine neden olmaz. Daha fazla bilgi edinmek için giriş videosunu izleyin: http://www.youtube.com/watch?v=OpaiGYxkSuQ

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.