ファイル名にスペースがあるフォルダー内のファイルをゼロにします。


0

ワイルドカードに一致するフォルダーまたはサブツリー内のすべてのファイルをゼロ(切り捨て)にしようとしています。別の投稿では、上のfind … -execメソッドを使用することをお勧めしました。しかし、この方法を試してみたところ、名前にスペースが含まれているファイルでは機能しませんでした。for variable in wildcardfind … -exec

試みられた2つの方法:

for メソッド(動作):

for x in *.wav; do echo -n "" > "$x"; done

find メソッド(ヘルプが必要):

find . -type f -iname \*.wav -exec > "{}" \;

をもたらす

find: invalid argument `;' to `-exec'

{}ゼロバイトというファイルを作成します。

で置き換える> "{}"echo {}、フォルダー内のファイルのリストが印刷されるため、構文は近いことに注意してください。間隔を空けたファイル名でエラーを軽減する方法を理解する必要があります。


以下の私のコメントで述べたように-exec > {}これまでの期間は機能しません。これは、ファイル名のスペースとは関係ありません。
Gマン

これらのソリューションのテストには非常に注意します。
ベロエ

回答:


1

findコマンドの問題は、-execを処理することを想定しているが>find … -exec単純なコマンドのみを処理することです。シェルのみが解釈方法を知っています>。(OK、そうすることができる1つまたは2つの他のプログラムがあるかもしれfindませんが、それらの1つではありません。)

あなたが持っているものに近いものが欲しいなら、

find . -type f -iname "*.wav" -exec sh -c '> "$1"' - {} \;

これであなたは言うfindシェルを実行するために、あなたが使う-c実行するシェルを伝えるためにC言語で構成されていommand >ファイル名が続いています。もっと簡単なことをお勧めします。

find . -type f -iname "*.wav" -exec cp /dev/null {} \;

おかげでcp / dev / nullメソッドを使用します。他の場所では、「find」メソッドが「for」メソッドよりも優れているというコメントを見ました。また、最近、誰かが切り捨てツールの使用について言及しているのを見ましたが、これも良いかもしれません。これらのツールはリスクを伴うと考えられているため、これらのツールのいずれも再帰的にしないと思います。rm -rfはリスクが高いと考えていますが。ありがとう!
-TheHairyOne

このアドバイスをどこで読んでいるのか興味があります。で説明したように名前にスペースを含むファイルをループ(当社のUnix&Linuxのサイト上で)、for x in `find . -name "*.wav"`あなたが本当にを避けるために必要なものの一種です。for x in *.wavそんなに悪くない。
Gマン

0

以下の{}構造を引用する必要はありませんfind -exec

find . -type f -name '* *' -exec ls {} \;

あなたは使用することはできません>find -exec、それはちょうど、コマンドとパラメータを望んでいます、。find -exec必要な場合に呼び出すスクリプトを作成します。


-exec> {}は、スペースのないファイルで正常に動作し、スペースを含むファイルでのみエラーを受け取ります。見つかったファイルをゼロアウトするために、例ごとにどの構文を使用しますか?-exec rm {}; {} \;をタッチします 唯一のオプションですか?
TheHairyOne

@TheHairyOne:私にとっては、空のファイルを-exec > {}返しfind: invalid argument `;' to -exec'、作成します{}。オプションは、truncate.shあなたがしたいことをするスクリプトを作成し、"$1"それから呼び出すことです-exec
チョロバ

@TheHairyOne:私は同意:-exec > {}動作しない、今までに、期間。これは、ファイル名のスペースとは関係ありません。
Gマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.