あなたは自分の名前にスペースまたはその他の特殊文字を含むファイルを心配する必要があるかどうかに応じて、これを解決するにはいくつかの方法があります後に別のコマンドを区切るために使用するには、実行します。
ファイル名の中に空白や特殊文字(文字、数字、ダッシュ、アンダースコアのみ)がない場合は、次のような簡単な解決策があります。 $(command)
を使用してコマンドを実行し、その結果を別のコマンドの引数に置き換えることができます。シェルは結果を空白、タブ、または改行で分割し、for
を順番に$f
に割り当て、各値に対してコマンドを実行します。
for f in $(find . -name myFile)
do
cp something $f
done
スペースやタブがある場合は、findの-exec
オプションを使用できます。 -exec command args
を渡し、{}
を置き換えたい場所に置き、引数を;
で終了します。 {}
と;
をシェルが解釈しないようにする必要があります。
find . -name myFile -exec cp something "{}" \;
時には-exec
では不十分です。たとえば、this questionでは、Bashパラメータの拡張を使用してファイル名を計算したいと考えました。これを行うには、-exec bash -c 'your command'
を渡す必要がありますが、{}
代入で引用問題が発生します。これを解決するには、(ファイル名に無効である)ヌル文字で区切られた結果を印刷するfind
から-print0
を使用することができ、かつヌルでパラメータを分割while read
ループにパイプを:
find . -name myFile -print0 | (while read -d $'\0' f; do
cp something "$f"
done)
/home/myuser/myFileの後に、{}の順番を2番目の位置に変更するだけで動作します。ありがとう。 –
@LuisAndrésGarcía、ああ、私は誤解しているかもしれません - ファイル '/ home/myuser/myFile'をコピーして、' find'によって見つかった 'myFile'をcwdに上書きしたいのですか? –
あなたは正しいです! :)見つかったファイルのプロパティを一覧表示する別の例は次のとおりです。find -exec ls -l {} ';' –