Si sono effettivamente tubazioni s' rm
uscita all'ingresso di find
. Ciò che si vuole è quello di utilizzare l'uscita di find
come argomenti a rm
:
find -type f -name '*.sql' -mtime +15 | xargs rm
xargs
è il comando che "convertiti" il suo standard input in argomenti di un altro programma, o, come hanno più accuratamente messo su i man
pagina,
creare ed eseguire righe di comando dallo standard input
Si noti che se i nomi dei file possono contenere caratteri di spaziatura, si dovrebbe correggere che:
find -type f -name '*.sql' -mtime +15 -print0 | xargs -0 rm
Ma in realtà, find
ha una scorciatoia per questo: l'opzione -delete
:
find -type f -name '*.sql' -mtime +15 -delete
Si prega di essere a conoscenza del seguenti avvisi in man find
:
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 starting 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.
PS Si noti che il piping diretto a rm
non è un'opzione, poiché rm
non prevede nomi di file su input standard. Quello che stai facendo è rimandare indietro.
fonte
2012-06-25 15:03:04
Grazie. Ho letto la pagina man e ho provato quella bandiera. Sto passando un percorso completo ma tornando indietro "/ usr/www2/bar/htdocs/foo/rsync/httpdocs/db_backups /: percorso relativo potenzialmente non sicuro". Qualche idea del perché? – jerrygarciuh
@jerrygarciuh dai uno sguardo [qui] (http://www.mail-archive.com/[email protected]/msg16944.html). –
grazie. Non sono sicuro di aver seguito bene il post ma quando ho emulato la loro soluzione e ho messo -delete alla fine del comando ha cancellato tutti i file sql indipendentemente dal tempo della mod ... ma non aveva l'avviso quindi immagino questo è il progresso ... – jerrygarciuh