「-exec」を使用して「find」コマンドの出力を実行するには?

「-exec」を使用して「find」コマンドの出力を実行するには?

これは私の以前の質問に関連しています[AWKを使用して常に特定の桁数で出力を印刷する方法

これで、次のコマンドが発生しました。目的は、特定の要素に応じて複数のファイルを別のディレクトリにコピーすることです。

find . -mtime -5 -type f -name '*data.txt' -printf "cp -p %p "/tmp/HTTPBackup/"%Td"/"\n"

この出力は次のようになります。

cp -p ./32982_96xxdata.txt /tmp/HTTPBackup/09/
cp -p ./32312_96xxdata.txt /tmp/HTTPBackup/11/
cp -p ./32191_96xxdata.txt /tmp/HTTPBackup/07/

今、これらすべての行を画面に印刷するにはどうすればよいですか?維持して-printf追加しますか-exec

前任者:

find . -mtime -5 -type f -name '15692_96xxdata.txt' -printf "cp -p %p "/tmp/HTTPBackup/"%Td"/"\n" -exec {} \;

動作しません。 644権限を持つファイルを所有しているにもかかわらず、権限の拒否について文句を言います。簡単なコピーを使用してください。

cp -p ./15692_96xxdata.txt /tmp/http_backups/09/
find: ‘./15692_96xxdata.txt’: Permission denied

それとも何とか-printf交換しますか-exec?これを試す方法がわからない。

ありがとうございます!

ベストアンサー1

%拡張の後に、-pそれを%pコマンド/tmp/HTTPBackup/%Tdの別の引数として渡す必要がありますcpxargsNULで区切られた引数(0はファイルパスまたは実行されたコマンド引数には現れない唯一のバイト値)を印刷する場合は、それを使用して1を安全に分割できます。

find . -name '*data.txt' -mtime -5 -type f \
  -printf '-p\0%p\0/tmp/HTTPBackup/%Td/\0' |
  xargs -r0 -n3 cp

または:

find . -name '*data.txt' -mtime -5 -type f \
  -printf '%p\0/tmp/HTTPBackup/%Td/\0' |
  xargs -r0 -n2 cp -p

HTTPBackup1グローバルに書き込み可能なディレクトリ内に固定名(たとえば)を持つディレクトリを使用することは安全ではないかもしれません/tmp

おすすめ記事