GNU/Linux >> Linux の 問題 >  >> Linux

名前でファイルとディレクトリを削除します。そのようなファイル、又はディレクトリはありません?

コンパイルされたデータをすべて削除する必要があります:

  • buildと呼ばれるディレクトリ 、
  • objと呼ばれるディレクトリ 、
  • *。soファイル。

コマンドを書きました

find ( -name build -o -name obj -o -name *.so ) -exec rm -rf {} ;

これにより、すべてのディレクトリが再帰的に処理され、必要なものがすべて削除されます。

最後にそのような出力があるのはなぜですか?
別のコマンドを作成する必要があるかもしれません。

find: `./3/obj': No such file or directory
find: `./3/build': No such file or directory
find: `./1/obj': No such file or directory
find: `./1/build': No such file or directory
find: `./2/obj': No such file or directory
find: `./2/build': No such file or directory

承認された回答:

-pruneを使用します とにかく削除するディレクトリで、findに通知します わざわざファイルを見つけようとしないでください:

find . ( -name build -o -name obj -o -name '*.so' ) -prune -exec rm -rf {} +

*.soにも注意してください 引用符で囲む必要があります。引用符で囲むと、シェルによって.soのリストに展開される可能性があります。 現在のディレクトリ内のファイル。

GNU -regexに相当します -タイプ1は次のようになります:

find . ( -name build -o -name obj -o -name '*?.so' ) -prune -exec rm -rf {} +

GNU固有の構文を使用する場合は、-deleteを使用することもできます。 -exec rm -rf {} +-deleteを使用 、GNU find -depthをオンにします 自動的。外部コマンドを実行しないため、より効率的であり、また、ディレクトリをシンボリックリンクに変更することで、誰かが間違ったファイルを削除する可能性がある競合状態を取り除くため、より安全です。 find ファイルを検索し、rm それを削除します(info -f find -n 'Security Considerations for find'を参照してください。 詳細については)

find . -regextype posix-egrep -regex '.*/((obj|build)(/.*)?|.+.so)' -delete

Linux
  1. Linuxですべてのファイルとディレクトリ名を小文字に変更

  2. プロのようにLinuxでファイルとディレクトリを探す

  3. Linux ファイルとディレクトリの削除

  1. Linuxでコマンドラインからファイルとディレクトリを削除する方法

  2. Linuxですべてのディレクトリのファイルを再帰的に検索する方法

  3. ファイル名を別のディレクトリに読み取ってファイルを移動しますか?

  1. 検索を使用して特定のディレクトリを検索し、1つのディレクトリを除くその中のすべてのファイルを削除しますか?

  2. Unix で空のディレクトリとファイルを見つけて削除する方法

  3. Linux で空のディレクトリとファイルを見つけて削除する方法