Ho avuto impressione cherimuovere tutti un tipo di file da una directory e dei suoi figli
rm -r *.xml
sarebbe rimuovere tutti i file da padre e figlio comunque:
*.xml: No such file or directory
Ho avuto impressione cherimuovere tutti un tipo di file da una directory e dei suoi figli
rm -r *.xml
sarebbe rimuovere tutti i file da padre e figlio comunque:
*.xml: No such file or directory
La pagina man di rm dice:
-r, -R, --recursive
remove directories and their contents recursively
Ciò significa la bandiera -r
si aspetta una directory. Ma *.xml
non è una directory.
Se si desidera rimuovere i file .xml tutto dalla directory corrente in modo ricorsivo di sotto è il comando:
find . -name "*.xml" -type f|xargs rm -f
sto supponendo che si desidera rimuovere tutti i file *.xml
in modo ricorsivo (all'interno delle directory correnti e di tutte le sottodirectory). Per fare questo, utilizzare find
:
find . -name "*.xml" -exec rm {} \;
Una nota a parte, l'eliminazione ricorsiva mi spaventa. Nei giorni più equilibrati, tendo a precedere quello passo con:
find . -name "*.xml"
(senza il bit -exec
) solo per vedere quello che potrebbe ottenere eliminati prima di prendere il salto. Consiglio che tu faccia lo stesso. I tuoi file ti ringrazieranno.
Sì, voglio farlo per alcuni tipi diversi. Tuttavia, il tuo script non sembra funzionare all'interno di Bash. – Will
Qual è l'output? – paulmelnikow
Non è necessario sfuggire a '{}' - la versione originale andava bene - probabilmente l'OP lo ha semplicemente digitato male. –
modo più bello, anche se questo è meno supportato in sistemi UNIX:
rm -rf */*.xml
rimuoverà i file xml da tutte le sottodirectory della directory corrente.
funzionerà per alberi di directory più profondi di solo 2 livelli? –
lettura this answer on finding empty directories unix, ho appena imparato a conoscere l'azione -delete:
-delete
Delete files; true if removal succeeded. If the removal failed, an error message is issued. If -delete fails, find's exit status will be nonzero (when it even‐
tually exits). Use of -delete automatically turns on the -depth option.
Warnings: Don't forget that the find command line is evaluated as an expression, so putting -delete first will make find try to delete everything below the start‐
ing points you specified. When testing a find command line that you later intend to use with -delete, you should explicitly specify -depth in order to avoid
later surprises. Because -delete implies -depth, you cannot usefully use -prune and -delete together.
Fonte: uomo trova
Ciò significa, è anche possibile eliminare tutti i file XML in modo ricorsivo come questo:
find . -name "*.xml" -type f -delete
Un modo semplice per fare è
rm -f * .xml
Questo rimuoverà tutti i file .xml dal directory corrente.
ZSH globbing ricorsivo per il salvataggio!
Invoke zsh: zsh
Assicurati siete nel dir si intende essere in: cd wherever
lista prima: ls **/*.xml
Togliere: rm **/*.xml
Resisterò alla forte tentazione di bash su bash
e ju st punto ai documenti zsh rilevanti sull'argomento here.
Non è necessario richiamare xargs; usa 'find -exec'. – paulmelnikow
@ noa..io so ... Ci sono molti modi per fare una cosa simile in Unix. Fino al PO per scegliere quale usare. Avevo appena dato quello che uso regolarmente. – Vijay
@noa In realtà 'xargs' è più efficiente. '-exec' chiama' rm' per ogni file corrispondente, mentre 'xargs' lo fa in lotti. Questo può fare una grande differenza quando ci sono molti file. – suvayu