+1 za robienie rozsądnych rzeczy zamiast mieć nadzieję, że narzędzia są wystarczająco inteligentne. pewnej nocy, kiedy dopiero uczyłem się Linuksa, skopiowałem jądro do / tmp przed pierwszą rekompilacją. nie powiodło się, ale usunęło stare, więc powiedziałem „nie przejmuj się, mam kopię” tylko po to, by stwierdzić, że zadanie cron o północy usunęło go z każdym plikiem starszym niż tydzień w / tmp! Musiałem ponownie skompilować ponownie i tym razem zrób to dobrze, albo zrestartuj mnie!
Javier
najlepsza odpowiedź wysłana :)
warren
3
Coś jak
find .-type d -not -name A -exec rm -ir {} \;
powinieneś zrobić.
edytować
Tak powinno być
find .-type d -maxdepth 1-not -name A -exec rm -ir {} \;
Nie używaj find, ponieważ niektórzy ludzie pokazali z -exec i rm bez przekazywania -print0, aby znaleźć i -0 do xargs. Będzie mylić nazwy plików ze spacjami lub znakami nowej linii:
$ mkdir 'foo foo'
$ mkdir foo$'\n'foo
$ find .-type d -exec rm -ir {} \;
rm: cannot remove directory `.'
rm: remove directory `./foo\nfoo'? y
find: `./foo\nfoo':No such file or directory
rm: remove directory `./foo foo'? y
find: `./foo foo': No such file or directory
Zamiast tego użyj find -print0 z xargs -0, „-exec command {} +” lub -delete, jeśli twoje znalezisko to obsługuje.
shopt | grep ext
Możesz sprawdzić, czy wtyczka jest włączona.źródło
Co powiesz na:
Pozwala to uniknąć „rzadkości” literówki w innych poleceniach.
źródło
Coś jak
powinieneś zrobić.
edytować
Tak powinno być
aby zapobiec
find
od recursing poniżej A.źródło
zwykle robię to, pracując nad poleceniem ls, które najpierw to robi. nie jestem na maszynie uniksowej, ale coś takiego:
ls -lda "[^ A]"
Po prawidłowym ustawieniu potok do polecenia
ls -lda "[^ A]" | xargs rm -rf
Jeśli powyższe wyrażenie regularne jest błędne, możesz je edytować powyżej ...
źródło
Jeśli chcesz być bardziej elastyczny, ale manualny, możesz:
W ten sposób możesz wykonywać ogólne munging.
źródło
Oto jeden sposób. Uważaj jednak na tego rodzaju rzeczy, jest on tak potężny, że można go używać tylko dla dobra lub zła ...
źródło
Nie używaj find, ponieważ niektórzy ludzie pokazali z -exec i rm bez przekazywania -print0, aby znaleźć i -0 do xargs. Będzie mylić nazwy plików ze spacjami lub znakami nowej linii:
Zamiast tego użyj find -print0 z xargs -0, „-exec command {} +” lub -delete, jeśli twoje znalezisko to obsługuje.
źródło
Zobacz także tutaj:
/programming/862388/delete-all-files-directories-except-two-specific-directories
źródło
Oprócz wcześniejszego przykładu:
możesz także:
aby uniknąć konieczności
cd some/subdir
najpierw.źródło