質問: サブディレクトリを持つx日より古いファイルを削除するためのbashスクリプト x日以上経過した大量のファイルを削除しようとしています。今、私はそれをするためのスクリプトがありますfind /path/to/files* -mtime +10 -exec rm {} \; しかし、これでサブディレクトリも削除されます。たくさんのフォルダがありますが、それらを保管し、そのフォルダ内の10日以上経過したファイルを削除したいと思います。これを行う方法はありますか?
回答: 結果をフィルタリングするためのtypeオプションfindは、ファイルのみを選択するためのtypeオプションを受け入れます。find /path/to/files -type f -mtime +10 -delete 何を削除するのかを表示するには-deleteを省略し、確認したら先に進んでfullコマンドを実行します。これはファイルでのみ実行され、ディレクトリでは実行されません。逆には-type dを使用して、引数に一致するディレクトリのみを一覧表示します。追加オプション将来必要になる可能性のあるオプションが他にもあるので、man findを読むことをお勧めします。たとえば、-maxdepthでは、見つかったアイテムを特定の深さに制限することしかできません。 -maxdepth 0はサブディレクトリに再帰しませんでした。いくつかの所見 rmだけではフォルダを削除することはできないので、コマンドがどのようにフォルダを削除したのでしょうか。そのためにはrm -rが必要です。 また、/path/to/files*は紛らわしいです。 /path/to/files/を意味しましたか、それともワイルドカードを使用していくつかのファイル名およびフォルダ名に展開することを期待していましたか? セミコロンをバックスラッシュで保護するのと同じように、置換されたファイル/ディレクトリ名がシェルによって解釈されないようにするため、{}を一重引用符で囲みます(つまり、'{}')。