質問: sedを使用してfindの結果を変更し、結果をcpに渡すにはどうすればよいですか? solarisでは、findコマンドで見つかったすべてのファイルを少し異なるパスにコピーしたいと思います。次のスクリプトは、基本的に、findで見つかったファイルごとにcpを実行します。例えば:cp ./content/english/activity1_compressed.swf ./content/spanish/activity1_compressed.swf cp ./content/english/activity2_compressed.swf ./content/spanish/activity2_compressed.swf ... #!/bin/bash # read all file names into an array filesarray=($(find "." -name "*_compressed.swf")) # get length of an array filesindex=${#filesarray[@]} # copy each file from english to spanish folder # ex: cp ./english/activity_compressed.swf ./spanish/activity_compressed.swf for (( i=0; i<${filesindex}; i++ )); do source="${filesarray[$i]}" # replace "english" with "spanish" in path destination="$(echo "${source}" | sed 's/english/spanish/')" cp "${source}" "${destination}" done exit 0; それは少し多いように思えますが、同じことを達成するために、findコマンドとcpコマンドとインラインでsedを使用する方法を考えています。私は次のようなものを望んでいましたが、どうやら括弧は操作の順序を変更するための許容できる方法ではありません。find . -name *_compressed -exec cp {} (echo '{}' | sed 's/english/spanish/')
回答: より簡単な方法がありますが、移植性のために、少しフォークとバックティックを使用できます。見つける。 -name * _compressed -exec sh -c'cp {} `echo {} | sed's/english/spanish/'`' \;