GNU/Linux >> Linux Esercitazione >  >> Linux

Elimina file e directory in base ai loro nomi. Nessun file o directory con questo nome?

Devo eliminare tutti i dati compilati:

  • directory chiamate build ,
  • directory chiamate obj ,
  • File *.so.

Ho scritto un comando

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

che attraversa tutte le directory in modo ricorsivo ed elimina tutto ciò di cui ho bisogno.

Perché ho un tale output alla fine?
Forse dovrei scrivere un comando diverso.

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

Risposta accettata:

Usa -prune nelle directory che eliminerai comunque per dire a find non preoccuparti di cercare i file al loro interno:

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

Nota anche che *.so deve essere citato, altrimenti potrebbe essere espanso dalla shell all'elenco di .so file nella directory corrente.

L'equivalente del tuo GNU -regex -tipo uno sarebbe:

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

Nota che se hai intenzione di utilizzare la sintassi specifica di GNU, potresti anche usare -delete invece di -exec rm -rf {} + . Con -delete , GNU find attiva -depth automaticamente. Non esegue comandi esterni, quindi in questo modo è più efficiente e anche più sicuro poiché rimuove la condizione di gara in cui qualcuno potrebbe essere in grado di farti rimuovere i file sbagliati cambiando una directory in un collegamento simbolico nel frattempo find trova un file e rm lo rimuove (vedi info -f find -n 'Security Considerations for find' per i dettagli).

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

Linux
  1. Come trovare un file in Linux in tutte le directory in modo ricorsivo

  2. Spostare i file leggendo i loro nomi di file in directory diverse?

  3. Linux Elimina file e directory

  4. Come trovare ed eliminare directory e file vuoti in Unix

  5. Come trovare ed eliminare directory e file vuoti in Linux

Come copiare file e directory in Linux

Trova ed elimina il file più vecchio se ci sono più di X file in una directory in Linux

Come trovare ed eliminare file che contengono un testo specifico nei loro nomi in Linux

Due comandi per trovare facilmente file e directory in Debian 11

Trova facilmente file e directory su Linux

Trova i file e stampa solo le loro directory principali