Muszę znaleźć wszystkie pliki zaczynające się od nazwy NAME
w drzewie katalogów i usunąć wszystkie te pliki za pomocą jednego polecenia powłoki.
Muszę znaleźć wszystkie pliki zaczynające się od nazwy NAME
w drzewie katalogów i usunąć wszystkie te pliki za pomocą jednego polecenia powłoki.
Odpowiedzi:
aby usunąć wszystkie pliki, których nazwa ma nazwę --- możesz użyć
find -name . 'name*' -exec rm {} \;
grep
ma -exec
przełącznik?
Usuń wszystkie pliki w bieżącym katalogu i jego podkatalogach, w których nazwa pliku zaczyna się od „foo”:
$ find . -type f -name foo\* -exec rm {} \;
Uwaga: używaj ostrożnie - najpierw wykonaj kopię zapasową - najpierw wykonaj próbę próbną, np
$ find . -type f -name foo\*
poda ci tylko nazwy plików, które zostaną usunięte.
find . -type f -name foo\* -delete
załatwiło sprawę
Próbowałem w ten sposób, że to działa dla mnie spróbuj poniżej polecenia.
rm -rf Example*
tutaj „Przykład” to tekst wspólny dla wszystkich plików.
Możesz użyć find
:
find . -name "name*" -exec rm {} \;
Z globstar
opcją (włącz za pomocą shopt -s globstar
):
rm -f **/NAME*
**/
rozszerza się do ./
, */
, */*/
, */*/*/
itd. Jeśli masz katalogów nazwy rozpoczynające NAME
komenda będzie skarżą się, że rm
nie można usunąć katalogi, ale to wszystko.
Zauważ, że może to napotkać ograniczenia długości linii poleceń, jeśli glob pasuje do wielu plików.
Alternatywnie, przy jak najmniejszej liczbie wywołań, rm
jak to możliwe, ale bez ograniczeń długości linii poleceń:
find . -type f -name 'NAME*' -exec rm -f {} +
(Zauważ, że +
zamiast \;
zamykać -exec
instrukcję).
find . -name 'foo'* -type f -delete
wydaje się najprostszą odpowiedzią.
Możesz uruchomić to bez -delete
flagi wcześniej, aby zobaczyć, które pliki zostaną usunięte.
Wyszukaj numer „i-węzła” pliku / folderu, a następnie usuń, używając numeru i-węzła. Poniżej znajduje się przykład:
ls -il
3407873 drwxr-xr-x. 2 root root 4096 Mar 30 07:49 –p
find . -inum 3407873 -exec rm -rf {} \;