あるフォルダから別のフォルダにいくつかのファイルを移動する必要があります。これはfindとgrepによって設定された基準です。ファイルを移動しようとすると、ファイルが破損します。
それが試みる実際の動きは次のとおりです。mv /somefolder/export//somefolder/storage/testfileOLD.txt
私が期待していたのはmv /somefolder/storage/testfileOLD.txt /somefolder/export/testfileOLD.txt
私が使用するコマンドは次のとおりです。
find /somefolder/storage/ -type f -name "*OLD*" -newermt '2019-05-1' ! -newermt '2019-06-7' -exec grep -qiF 'closed' {} \; -exec mv {} /somefolder/export/{} \;
私はこれを試してみましたが、-exec basename {}
これは私に正しい結果を与えますが、mvを次のように修正した場合
-exec echo {} /somefolder/export/$(basename {}) \;
動作していることを確認しましたが、まだ/somefolder/export//somefolder/storage/testfileOLD.txt
。
ベストアンサー1
$(basename {})
失敗します(より良い:空の文字列だけが必要です)。ここで呼び出されたサブシェルはファイル名には拡張されません{}
。これは照会専用であり、コマンドによって生成されたサブシェルにエクスポートされないためです。
以下を実行してテストできます。
find -exec echo "this will be empty:" $(basename '{}') \;
小さなスクリプトを書くことをお勧めします。
#!/bin/bash
mv "$1" /somefolder/export/"$( basename ${1})"
コマンドで実行してくださいfind
。
find /dir/ <specs> -exec grep -qiF 'closed' '{}' \; -exec bash script.sh '{}' \;
AFAIKサブシェルに渡す動作はバージョン'{}'
によって異なりますfind
。