Devo trovare tutti i file che iniziano con il nome NAME
in un albero di directory e rimuovere tutti questi file usando un comando shell.
Devo trovare tutti i file che iniziano con il nome NAME
in un albero di directory e rimuovere tutti questi file usando un comando shell.
Risposte:
per eliminare tutti i file il cui nome ha nome --- è possibile utilizzare
find -name . 'name*' -exec rm {} \;
grep
ha un -exec
interruttore?
Elimina tutti i file nella directory corrente e nelle sue sottodirectory in cui il nome del file inizia con "pippo":
$ find . -type f -name foo\* -exec rm {} \;
NB: usare con cautela - eseguire prima il backup - eseguire prima anche una corsa a secco, ad es
$ find . -type f -name foo\*
ti dirà solo i nomi dei file che verrebbero eliminati.
find . -type f -name foo\* -delete
fatto il trucco
Ho provato in questo modo che funziona per me prova sotto il comando.
rm -rf Example*
qui "Esempio" è un testo comune per tutti i file.
Puoi usare find
:
find . -name "name*" -exec rm {} \;
Con l' globstar
opzione (abilita con shopt -s globstar
):
rm -f **/NAME*
**/
si espande a ./
, */
, */*/
, */*/*/
ecc Se si dispone di una directory nome che inizia con NAME
, il comando si lamentano che rm
non è possibile rimuovere le directory, ma questo è tutto.
Si noti che ciò potrebbe incorrere in limiti di lunghezza della riga di comando se il glob corrisponde a molti file.
In alternativa, con il minor numero rm
possibile di invocazioni , ma non soggetto a limiti di lunghezza della riga di comando:
find . -type f -name 'NAME*' -exec rm -f {} +
(Nota +
invece di \;
chiudere la -exec
dichiarazione.)
find . -name 'foo'* -type f -delete
sembra la risposta più semplice.
Puoi eseguirlo senza il -delete
flag prima di vedere quali file verranno eliminati.
Cercare il numero "Inode" del file / cartella e quindi eliminare utilizzando il numero di inode. Di seguito è riportato un esempio:
ls -il
3407873 drwxr-xr-x. 2 root root 4096 Mar 30 07:49 –p
find . -inum 3407873 -exec rm -rf {} \;