Czy ktoś ma rozwiązanie, aby usunąć te brzydkie pliki ._ i .DS_Store, które dostaje się po przeniesieniu plików z komputera Mac na serwer z systemem Linux?
określić katalog startowy i pozwolić mu odejść? jak / var / www / html / down ...
Czy ktoś ma rozwiązanie, aby usunąć te brzydkie pliki ._ i .DS_Store, które dostaje się po przeniesieniu plików z komputera Mac na serwer z systemem Linux?
określić katalog startowy i pozwolić mu odejść? jak / var / www / html / down ...
Odpowiedzi:
przejdź do katalogu i użyj:
find . -name ".DS_Store" -print0 | xargs -0 rm -rf
find . -name "._*" -print0 | xargs -0 rm -rf
Nie testowane, wypróbuj je najpierw bez xargs!
Możesz zamienić kropkę po znalezieniu na katalog zamiast najpierw przechodzić do katalogu.
find /dir/here ...
-delete
akcję, która może to skrócić. @JT: To wyszukuje rekurencyjnie pod .
. Zależy od tego, ile jest plików i podkatalogów ... czy nie możesz po prostu zabronić ich przesyłania?
-r
flagą (rekurencyjnych) nie jest zalecane, ponieważ w tym przypadku nie chcesz, aby usunąć wszelkie katalogi ..
command rm
byłoby lepszym (czyli bardziej bezpośrednim) rozwiązaniem? (Mówiąc „bezpośrednio”, mam na myśli, że dotyczy konkretnie danego problemu i niczego innego, a zatem jest mniej prawdopodobne, że będzie miał jakiekolwiek niepożądane skutki uboczne, a także będzie bardziej oczywiste dla każdego, kto musi utrzymywać kod później.)
Nowsze findutils obsługuje -delete
, więc:
find . -name ".DS_Store" -delete
Dodaj, -print
aby również uzyskać listę usunięć.
Wydaje mi się, że polecenie zadziała, jeśli masz aktualny system POSIX. Przynajmniej działa dla mnie na OS X 10.8 i działa dla innych, którzy przetestowali go na macOS 10.12 (Mojave).
Podziękowania dla @ephemient w komentarzu do posta @ X-Istence (uznał, że był on wystarczająco pomocny, aby uzasadnić własną odpowiedź).
find
domyślnie powraca do bieżącego katalogu roboczego.
.
systemu macOS 10.12 (Sierra).
Proste polecenie:
rm `find ./ -name '.DS_Store'` -rf
rm `find ./ -name '._'` -rf
Powodzenia!
rm -i
znaleziska ./ -name '* py'` -rf , which did NOT prompt me to delete files. you will need to take it on the end (i.e.
-rfi`). Dzięki Bogu za mój skrypt zapasowy.
-bash: /bin/rm: Argument list too long
cd /var/www/html && find . -name '.DS_Store' -print0 | xargs -0 rm
cd /var/www/html && find . -name '._*' -print0 | xargs -0 rm
Możesz przełączyć się na zsh zamiast bash. Dzięki temu możesz używać ** do dopasowywania plików w dowolnym miejscu w drzewie katalogów:
$ rm /var/www/html/**/_* /var/www/html/**/.DS_Store
Możesz je również łączyć w ten sposób:
$ rm /var/www/html/**/(_*|.DS_Store)
Zsh ma wiele innych funkcji, których brakuje bashowi, ale tylko ta jest warta przejścia. Jest dostępny w większości (prawdopodobnie wszystkich) dystrybucjach Linuksa, a także w Cygwin i OS X.
Więcej informacji można znaleźć w witrynie zsh .
**
też :-) (choć nie domyślnie, shopt -s globstar
musi być ustawiony)
find . -name "FILE-TO-FIND"-exec rm -rf {} \;
find
który go obsługuje, +
jest podobny do xargs: find . -name "FILE-TO-FIND" -exec rm -rf {} +
- (również brakuje ci spacji wcześniej -exec
)
Przykład rekurencyjnego usuwania pliku „Thumbs.db”;
find . -iname "Thumbs.db" -print0 | xargs -0 rm -rf
Zatwierdź przez:
find . -iname "Thumbs.db"
Powinno to teraz nie wyświetlać żadnych wpisów z „Thumbs.db” w bieżącej ścieżce.
xargs
a print0
zamiast exec
(istnieją powody).
Lepiej jest zobaczyć, co jest usuwane, dodając -print do tej odpowiedzi
find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete -print
jeśli masz Bash 4.0 ++
#!/bin/bash
shopt -s globstar
for file in /var/www/html/**/.DS_Store /var/www/html/**/._
do
echo rm "$file"
done
Kilka uwag:
„-delete” nie jest cykliczne. Więc jeśli .TemporaryItems (folder) zawiera pliki, polecenie kończy się niepowodzeniem.
Istnieje wiele takich nieznośnych plików utworzonych przez komputery Mac: .DS_Store ._. DS_Store .TemporaryItems .apdisk
To jedno polecenie dotyczy wszystkich z nich. Zapisuje ciągłe wyszukiwanie wielu dopasowań.
find /home/foo \( -name '.DS_Store' -or -name '._.DS_Store' -or -name '._*' -or -name '.TemporaryItems' -or -name '.apdisk' \) -exec rm -rf {} \;
Działa to również:
sudo rm -rf 2018-03-*
tutaj twoje usuwanie plików z nazwami formatu 2018-03- (coś innego)
nie komplikuj
sudo
ani nie podajesz żadnych informacji, jak rm
działa w kontekście twojej odpowiedzi.