Qualcuno ha una soluzione per rimuovere quei fastidiosi file ._ e .DS_Store che si ottengono dopo aver spostato i file da un Mac a un server Linux?
specificare una directory iniziale e lasciarla andare? come / var / www / html / down ...
Qualcuno ha una soluzione per rimuovere quei fastidiosi file ._ e .DS_Store che si ottengono dopo aver spostato i file da un Mac a un server Linux?
specificare una directory iniziale e lasciarla andare? come / var / www / html / down ...
Risposte:
passare alla directory e utilizzare:
find . -name ".DS_Store" -print0 | xargs -0 rm -rf
find . -name "._*" -print0 | xargs -0 rm -rf
Non testato, provali prima senza gli xargs!
È possibile sostituire il punto dopo aver trovato, con la directory, anziché passare prima alla directory.
find /dir/here ...
-delete
un'azione, che potrebbe abbreviare questo. @JT: questa ricerca ricorsivamente sotto .
. Dipende da quanti file e sottodirectory ci sono ... non puoi semplicemente vietare il caricamento?
-r
flag (ricorsivo) non è consigliato in questo caso poiché non si desidera eliminare alcuna directory.
command rm
sarebbe una soluzione migliore (cioè più diretta)? (Con "diretto" intendo che si occupa specificamente del problema attuale e nient'altro, e quindi è meno probabile che abbia effetti collaterali indesiderati e sarà anche più autoesplicativo per chiunque debba mantenere il codice più tardi.)
I più recenti findutils supportano -delete
, quindi:
find . -name ".DS_Store" -delete
Aggiungi -print
per ottenere anche un elenco di eliminazioni.
Il comando funzionerà per te se hai un sistema POSIX aggiornato, credo. Almeno funziona per me su OS X 10.8 e funziona per altri che lo hanno testato su macOS 10.12 (Mojave).
Ringraziamo @ephemient in un commento sul post di @ X-Istence (pensato che fosse abbastanza utile da giustificare la propria risposta).
find
per impostazione predefinita, ricorre nella directory di lavoro corrente.
.
su macOS 10.12 (Sierra).
Comando semplice:
rm `find ./ -name '.DS_Store'` -rf
rm `find ./ -name '._'` -rf
In bocca al lupo!
rm -i
ricerca ./ -name '* py'` -rf , which did NOT prompt me to delete files. you will need to take it on the end (i.e.
-rfi`). Grazie a Dio per il mio script di backup.
-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
È possibile passare a zsh invece di bash. Ciò consente di utilizzare ** per abbinare i file in qualsiasi punto di un albero di directory:
$ rm /var/www/html/**/_* /var/www/html/**/.DS_Store
Puoi anche combinarli in questo modo:
$ rm /var/www/html/**/(_*|.DS_Store)
Zsh ha molte altre funzionalità a cui manca Bash, ma vale la pena fare una sola operazione. È disponibile nella maggior parte (probabilmente in tutte) le distribuzioni Linux, nonché in Cygwin e OS X.
Puoi trovare maggiori informazioni sul sito zsh .
**
anche :-) (anche se non per impostazione predefinita, shopt -s globstar
deve essere impostato)
find . -name "FILE-TO-FIND"-exec rm -rf {} \;
find
supporto che lo supporta, +
è simile a xargs: find . -name "FILE-TO-FIND" -exec rm -rf {} +
- (anche, ti manca uno spazio prima -exec
)
Esempio per eliminare "Thumbs.db" in modo ricorsivo;
find . -iname "Thumbs.db" -print0 | xargs -0 rm -rf
Convalida da:
find . -iname "Thumbs.db"
Questo dovrebbe ora, non visualizzare nessuna delle voci con "Thumbs.db", all'interno del percorso corrente.
xargs
e print0
invece di exec
(ci sono ragioni).
È meglio vedere cosa sta rimuovendo aggiungendo -print a questa risposta
find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete -print
se hai Bash 4.0 ++
#!/bin/bash
shopt -s globstar
for file in /var/www/html/**/.DS_Store /var/www/html/**/._
do
echo rm "$file"
done
Alcune cose da notare:
'-delete' non è ricorsivo. Quindi, se .TemporaryItems (cartella) contiene file, il comando non riesce.
Ci sono molti di questi fastidiosi file creati dai mac: .DS_Store ._. DS_Store .TemporaryItems .apdisk
Questo comando è indirizzato a tutti loro. I salvataggi della corsa vengono ripetuti più volte per più partite.
find /home/foo \( -name '.DS_Store' -or -name '._.DS_Store' -or -name '._*' -or -name '.TemporaryItems' -or -name '.apdisk' \) -exec rm -rf {} \;
Questo funziona anche:
sudo rm -rf 2018-03-*
qui i tuoi file eliminati con i nomi del formato 2018-03- (qualcos'altro)
mantienilo semplice
sudo
né fornire alcuna informazione su come rm
funziona nel contesto della tua risposta.