この質問が一般的になっているようです。以下に自分の質問に答えました。 Inianと言うのは正しいことであり、ソースコードをよりよく分析するのに役立ちました。
私の問題はFIND
ではなくRM
にありました。私の答えは、私が現在使用しているコードのブロックを提供し、FINDが何も見つからないにもかかわらずRMに引数を渡して上記のエラーを引き起こす問題を回避することです。
以下の古い質問
同じコマンドの多くの異なるバージョンを書いています。すべてが実行されますが、エラー/情報があります:
rm: missing operand
Try 'rm --help' for more information.
これらは私が使用しているコマンドです:
#!/bin/bash
BDIR=/home/user/backup
find ${BDIR} -type d -mtime +180 -print -exec rm -rf {} \;
find ${BDIR} -type d -mtime +180 -print -exec rm -rf {} +
find "$BDIR" -type d -mtime +180 -print -exec rm -rf {} \;
find "$BDIR" -depth -type d -mtime +180 -print -exec rm -rf {} \;
find ${BDIR} -depth -type d -mtime +180 -print -exec rm -rf {} +
find $BDIR -type d -mtime +180 -print0 | xargs -0 rm -rf
DEL=$(FIND $BDIR -type d -mtime +180 -print)
rm -rf $DEL
それらはすべて正しいと確信しています(彼らはすべて仕事をしているので)、手動で実行した場合、そのメッセージは返されませんが、.shスクリプトでは私はそうします。
編集:私はこれらのRMの多くを持っているので、問題は他のどこかにある可能性があります。私はそれらすべてをチェックしています。上記のコードはすべて機能しますが、最良の答えはマークされたものです;)
問題は、find/grep
とともにxargs
と共に、前のコマンドが成功した場合にのみパイプコマンドを実行する必要があります。上記の場合と同様に、find
コマンドが検索結果を生成しない場合、rm
コマンドは空の引数リストで呼び出されます。
man
のxargs
ページ
-r Compatibility with GNU xargs. The GNU version of xargs runs the
utility argument at least once, even if xargs input is empty, and
it supports a -r option to inhibit this behavior. The FreeBSD
version of xargs does not run the utility argument on empty
input, but it supports the -r option for command-line compatibil-
ity with GNU xargs, but the -r option does nothing in the FreeBSD
version of xargs.
さらに、以下の簡単なものを貼り付けたように、すべてのコマンドを試す必要はありません。
-r
xargsへの引数
find "$BDIR" -type d -mtime +180 -print0 | xargs -0 -r rm -rf
rm
の-f
オプションは、rm: missing operand
エラーを抑制します。
-f, --force
ignore nonexistent files and arguments, never Prompt
調査後、私が使いやすいコマンドは次のとおりです。
HOME=/home/user
FDEL=$HOME/foldersToDelete
BDIR=/backup/my_old_folders
FLOG=/var/log/delete_old_backup.log
find ${BDIR} -mindepth 1 -daystart -type d -mtime +180 -printf "%f\n" > ${FDEL}
if [[ $? -eq 0 && $(wc -l < ${FDEL}) -gt 0 ]]; then
cd ${BDIR}
xargs -d '\n' -a ${FDEL} rm -rf
LOG=" - Folders older than 180 were deleted"
else
LOG=" - There aren't folders older than 180 days to delete"
fi
echo ${LOG} >> ${FLOG}
理由?削除するすべての古いフォルダーを検索し、それらの名前をスペースの有無に関係なくすべてファイルに印刷します。ファイルが0バイトより大きい場合、これは私がこれ以上欲しくないフォルダがあることを意味します。
「FIND」が「rm:missing operand」で失敗した場合、おそらくFIND自体ではなくRMで検索することではないでしょう。 FINDを使用してファイルを削除する良い方法は、あなたと共有したいと思った方法です。