project.updated
特定の入れ子になったディレクトリ内のすべてのファイルを見つけて、ファイルのproject.json
内容をそのファイルに置き換える必要があります。同じ目次。
私はBusyBox(1.33.1)を使用しています。
/apps
/project1
project.json
project.updated
/project2
project.json
ご覧のとおり、project.updated
project1フォルダの下にファイルがあります。このファイルの内容はproject.json
ファイルを置き換える必要があります。
これは正確なファイルを知っている場合にのみ機能します。
cat /apps/project1/project.updated > /apps/project1/project.json
プロジェクトはたくさんありますが、ファイルを含むプロジェクトは少数ですが、どのように動的にこれを実行できますかproject.updated
?
ベストアンサー1
ファイルがあるディレクトリから指定されたコマンドを実行するには、find
およびを使用します。-execdir
find /apps -type f -name '*updated'\
-execdir bash -c 'cat "$0" > "$(basename "$0" .updated).json"' {} \;
練習実行の場合は、echo
まずコマンドを実行してから、見つかったファイルを印刷します。
find /apps -type f -name '*updated' -print\
-execdir bash -c 'echo cat "$0" \> "$(basename "$0" .updated).json"' {} \;
ここでリダイレクトを避けることを忘れないでください\>
!
sh
(移植性が必要で、POSIX規格の場合でも使用可能)
-execdir
使用できない場合-exec
でも可能ですが、dirname
ターゲットファイルも定義する必要があります。
find /apps -type f -name '*updated'\
-exec bash -c 'cat "$0" > "$(dirname "$0")/$(basename "$0" .updated).json"' {} \;
またはもっと簡単ですが、次には使用できませんsh
。
find /apps -type f -name '*updated'\
-exec bash -c 'cat "$0" > "${0/%updated/json}"' {} \;
これは文字列の終わりに一致する${0/%updated/json}
ように置き換えられます。その結果、フルパスが含まれるため、これは必要ありません。updated
$0
json
$0
find
-execdir