parts = grep "/root/backups/*"
for part in $parts
do
echo $part
rm -rf $part #delete
done
基本的には、Bash スクリプトを使用してフォルダーを反復処理し、フォルダー内のすべての項目を返す必要があります。
grep 経由では動作しませんが、もっと簡単な方法があるかもしれません。最初の行は、まったくの疑似手がかりのないコードです。
答え1
これはループなしで簡単に実行できます。
ファイルを削除したいだけの場合は、rm を使用します。
$ rm -rf /root/backups/*
削除時にファイル名を表示したい場合は、代わりに find を使用します。
$ find /root/backups -maxdepth 1 -mindepth 1 -print -exec rm -rf {} \;
-maxdepth オプションは、開始点 /root/backups から 1 レベル以上下がらないように find に指示します。-mindepth オプションは、結果を返す開始位置を find に指示し、実質的に開始点を無視するように find に指示します。-print オプションは、見つかったファイルを画面に印刷するだけです。-exec を使用すると、{} が見つかったファイルに置き換えられるため、rm を呼び出してそれらを削除します。
編集: コメントごとに不要な -exec を削除しました
答え2
grep コマンドを次のように変更します。
i を ``ls -bRC1 /path/* で実行します
。 echo $i を実行します。 rm $i を実行します。 done
-b は、rm でエラーや予期しない結果を引き起こす可能性のあるスペースやその他の文字をエスケープします。-R は再帰的です。-C1 は単一列です (冗長である可能性があります)。-rf を再検討します。
forループの代わりにfindを使うといいかもしれません
find /path -H -maxdepth 3 -type f -mtime +7 -exec rm {} \; -ls
上記のオプションの意味が分からない場合は、 と入力してくださいman find
。
答え3
grep -lはファイル名だけを表示します
パーツ = grep -rl ....
答え4
特定のディレクトリ内のファイル名のリストが欲しいとします。これを実行するプログラムがあり、その名前を読むのが恥ずかしくなるでしょう: ls
。それができることのすべてです! サブディレクトリ内のファイルを含む再帰的なリストが欲しいので、 を使用しますls -R
。その出力をスクリプト内の変数に入れて、好きなように操作できます。