czy można użyć rm do rekurencyjnego usuwania plików i katalogów pasujących do wzorca bez używania innych poleceń?
unix
maintenance
rm
użytkownik15586
źródło
źródło
find | grep | xargs rm
. Jeśli istnieją pliki ze spacjami (lub znakami nowej linii), spowoduje to uszkodzenie (w zależności od nazw plików i ich lokalizacji) może usunąć rzeczy, których nie zamierzałeś usunąć.find … -print0 | xargs -0 rm
będzie znacznie bardziej wytrzymały. Będzie to jednak oznaczało, że nie możesz użyćgrep
i musisz użyćfind
predykatów, aby dopasować i wydrukować 0 tylko żądanych plików. Drugi przykład Warrena będzie bardziej niezawodnyfind -type f -name '*~' -print0 | xargs -0 rm
.„bez użycia innych poleceń”
Nie.
źródło
Za pomocą Bash, z
globstar
setem, tak :Wypróbuj
ls -1
najpierw np. Przed,rm
aby wyświetlić listę pasujących plików.Ustawiasz opcje poprzez np
shopt -s globstar
.Alternatywnie, krótszy
find
wariant:lub dla GNU
find
:lub inna alternatywa dla non-GNU
find
(nieco wolniej):Aby również usunąć katalogi, o które prosisz: po prostu zmień
rm
narm -r
powyższe polecenia i pomiń dopasowanie tylko-type f
wfind
poleceniach.źródło
Odrzuciłbym „rm -rf” gdzie jest kombinacja nazw plików i pasujących wzorców, takich jak * i? itp. (np. dzisiejszy_log_2009 ????. log). To zacznie się od bieżącego Dir i zakończy rekurencyjne usuwanie plików, które wykonują ten wzorzec.
źródło
Jeśli używasz zsh (1) , włącz „rozszerzone globowanie”
setopt extendedglob
w .zshrc. Prefiks wzoru „** /” spowoduje następnie usunięcie rekurencyjne:% rm -rf ** / <wzorzec>
Jeśli jednak jest wiele plików do usunięcia, powinieneś skorzystać z funkcji find (1) z xargs (1) lub -exec, a także polecam to zrobić w skryptach powłoki.
źródło