¿Alguien tiene una solución para eliminar esos molestos archivos ._ y .DS_Store que se obtienen después de mover archivos de una Mac a un servidor Linux?
especificar un directorio de inicio y dejarlo ir? como / var / www / html / down ...
¿Alguien tiene una solución para eliminar esos molestos archivos ._ y .DS_Store que se obtienen después de mover archivos de una Mac a un servidor Linux?
especificar un directorio de inicio y dejarlo ir? como / var / www / html / down ...
Respuestas:
cambie al directorio y use:
find . -name ".DS_Store" -print0 | xargs -0 rm -rf
find . -name "._*" -print0 | xargs -0 rm -rf
No probado, pruébalos sin los xargs primero.
Puede reemplazar el período después de buscar, con el directorio, en lugar de cambiar primero al directorio.
find /dir/here ...
-delete
acción que podría acortar esto. @JT: Esto busca recursivamente debajo .
. Depende de cuántos archivos y subdirectorios haya ... ¿no puede simplemente prohibir que se carguen?
-r
bandera (recursivo) no se recomienda en este caso, ya que no quiere eliminar los directorios ..
command rm
sería una solución mejor (es decir, más directa)? (Por "directo" me refiero a que trata específicamente con el problema en cuestión y nada más, y por lo tanto es menos probable que tenga efectos secundarios no deseados, y también será más claro para cualquiera que tenga que mantener el código más tarde.)
find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete
Los nuevos soportes de findutils -delete
, por lo tanto:
find . -name ".DS_Store" -delete
Agregar -print
para obtener también una lista de eliminaciones.
El comando funcionará para usted si tiene un sistema POSIX actualizado, creo. Al menos funciona para mí en OS X 10.8 y para otros que lo han probado en macOS 10.12 (Mojave).
Gracias a @ephemient en un comentario en la publicación de @ X-Istence (pensé que era lo suficientemente útil como para garantizar su propia respuesta).
find
repite en el directorio de trabajo actual de forma predeterminada.
.
en macOS 10.12 (Sierra).
Comando simple:
rm `find ./ -name '.DS_Store'` -rf
rm `find ./ -name '._'` -rf
¡Buena suerte!
rm -i
hallazgo ./ -name '* py'` -rf , which did NOT prompt me to delete files. you will need to take it on the end (i.e.
-rfi`). Gracias a Dios por mi script de respaldo.
-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
Puede cambiar a zsh en lugar de bash. Esto le permite usar ** para hacer coincidir archivos en cualquier parte de un árbol de directorios:
$ rm /var/www/html/**/_* /var/www/html/**/.DS_Store
También puedes combinarlos así:
$ rm /var/www/html/**/(_*|.DS_Store)
Zsh tiene muchas otras características que bash carece, pero solo vale la pena hacer el cambio. Está disponible en la mayoría de las distribuciones de Linux (probablemente todas), así como en Cygwin y OS X.
Puede encontrar más información en el sitio zsh .
**
también es compatible :-) (aunque no de forma predeterminada, shopt -s globstar
debe configurarse)
find . -name "FILE-TO-FIND"-exec rm -rf {} \;
find
que lo admite, +
es similar a xargs: find . -name "FILE-TO-FIND" -exec rm -rf {} +
- (también, le falta un espacio antes -exec
)
Ejemplo para eliminar "Thumbs.db" recursivamente;
find . -iname "Thumbs.db" -print0 | xargs -0 rm -rf
Validar por:
find . -iname "Thumbs.db"
Esto debería ahora, no mostrar ninguna de las entradas con "Thumbs.db", dentro de la ruta actual.
xargs
y en print0
lugar de exec
(hay razones).
Es mejor ver qué se está eliminando agregando -print a esta respuesta
find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete -print
si tienes Bash 4.0 ++
#!/bin/bash
shopt -s globstar
for file in /var/www/html/**/.DS_Store /var/www/html/**/._
do
echo rm "$file"
done
Algunas cosas a tener en cuenta:
'-delete' no es recursivo. Entonces, si .TemporaryItems (carpeta) tiene archivos, el comando falla.
Hay muchos de estos molestos archivos creados por Mac: .DS_Store ._. DS_Store .TemporaryItems .apdisk
Este comando se dirige a todos ellos. Ahorra al ejecutar find una y otra vez para múltiples partidos.
find /home/foo \( -name '.DS_Store' -or -name '._.DS_Store' -or -name '._*' -or -name '.TemporaryItems' -or -name '.apdisk' \) -exec rm -rf {} \;
Esto también funciona:
sudo rm -rf 2018-03-*
aquí estás eliminando archivos con nombres del formato 2018-03- (algo más)
mantenlo simple
sudo
ni proporciona información sobre cómo rm
funciona en el contexto de su respuesta.