これを行うときに予想されるファイル名だけでなく、フルパスを返すのはなぜですか(わかっています。愚かなことです)。
ls -l | awk '{print $9}' | xargs -I% find ./my_dir -type f -name "%" -exec echo $(basename {}) \;
そして、はい、わかりました。愚かなことですが、目標はbasename {}を{}にCPすることです(そしてandではループを使用しましたfor i in $(ls); do find ./my_dir -type f -name $i -exec cp $i {} \;; done
)。
ありがとうございます。
答え1
スペースを含むファイル名(たとえば)、またはスペースを含むユーザーまたはグループ名を持つシステム(Active Directoryに参加しているシステムなど)の場合、this one.txt
コードは失敗します。
構造for i in $(ls)
は次のとおりです未使用。代わりにワイルドカード globfor i in *
を使用してください。
最後に質問に直接答えてください$(basename {})
。この$( ... )
値は一重引用符シェルで保護されていないため、評価されます。今後コマンドが実行されます。結果$(basename {})
は簡単{}
なので、
xargs -I% find ./my_dir -type f -name "%" -exec echo $(basename {}) \;
これを入力したように解析され、実行されます。
xargs -I% find ./my_dir -type f -name % -exec echo {} \;
似たようなものを探しているかもしれません。
for i in *
do
find ./my_dir -type f -name "$i" -exec cp "$i" {} \; -quit
done
しなければならないことを忘れないでくださいいつも$
変数と式を使用するときは二重引用符を使用してください。 (公平に言えば、この場合は役に立ちませんが、慣れるべき部分です。)