これは私の以前の質問に関連しています[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
の別の引数として渡す必要がありますcp
。xargs
NULで区切られた引数(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
HTTPBackup
1グローバルに書き込み可能なディレクトリ内に固定名(たとえば)を持つディレクトリを使用することは安全ではないかもしれません/tmp
。