コンパイルされたデータをすべて削除する必要があります。
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
答え1
-prune
削除するディレクトリでこれを使用して、find
そのディレクトリ内のファイルを見つけようとしないでください。
find . \( -name build -o -name obj -o -name '*.so' \) -prune -exec rm -rf {} +
また、*.so
引用が必要です。それ以外の場合、シェルはそれを.so
現在のディレクトリのファイルのリストに拡張できます。
GNUタイプと同等のものは次のとおり-regex
です。
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
答え2
find
その理由は、まずディレクトリツリーを削除してディレクトリの内容を調べようとするためです。これは明らかに最良の順序ではありません。find
まず、内容を強制的に確認できます。
find . -depth ...
-delete
ファイルと-exec rmdir
ディレクトリについてこの点を考慮する必要があります。
答え3
私のソリューション。
find . -regextype posix-egrep -regex ".*/(obj|build|.+\.so)" -prune -exec rm -rf {} +