Alguém tem uma solução para remover os irritantes arquivos ._ e .DS_Store obtidos após mover arquivos de um Mac para um servidor Linux?
especificar um diretório inicial e deixá-lo ir? como / var / www / html / down ...
Alguém tem uma solução para remover os irritantes arquivos ._ e .DS_Store obtidos após mover arquivos de um Mac para um servidor Linux?
especificar um diretório inicial e deixá-lo ir? como / var / www / html / down ...
Respostas:
mude para o diretório e use:
find . -name ".DS_Store" -print0 | xargs -0 rm -rf
find . -name "._*" -print0 | xargs -0 rm -rf
Não testado, experimente-os sem o xargs primeiro!
Você pode substituir o período após a localização, pelo diretório, em vez de mudar para o diretório primeiro.
find /dir/here ...
-delete
ação que pode encurtar isso. @JT: Isso pesquisa recursivamente em .
. Depende de quantos arquivos e subdiretórios existem ... você não pode simplesmente proibir os uploads?
-r
bandeira (recursivo) não é recomendado neste caso, desde que você não deseja excluir qualquer diretório ..
command rm
seria uma solução melhor (ou seja, mais direta)? (Por "direto", quero dizer que lida especificamente com o problema em questão e nada mais, e, portanto, é menos provável que tenha efeitos colaterais indesejados e também será mais auto-explicativo para quem precisar manter o código
Os novos findutils suportam -delete
, então:
find . -name ".DS_Store" -delete
Adicionar -print
para também obter uma lista de exclusões.
O comando funcionará para você se você tiver um sistema POSIX atualizado, acredito. Pelo menos, funciona para mim no OS X 10.8 e funciona para outras pessoas que o testaram no macOS 10.12 (Mojave).
Os nossos agradecimentos a @ephemient em um comentário na postagem de @ X-Istence (consideramos útil o suficiente para justificar sua própria resposta).
find
recursa no diretório de trabalho atual por padrão.
.
do macOS 10.12 (Sierra).
Comando simples:
rm `find ./ -name '.DS_Store'` -rf
rm `find ./ -name '._'` -rf
Boa sorte!
rm -i
achado ./ -name '* py'` -rf , which did NOT prompt me to delete files. you will need to take it on the end (i.e.
-rfi`). Graças a Deus pelo meu script de 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
Você pode mudar para zsh em vez de bash. Isso permite usar ** para corresponder arquivos em qualquer lugar da árvore de diretórios:
$ rm /var/www/html/**/_* /var/www/html/**/.DS_Store
Você também pode combiná-los assim:
$ rm /var/www/html/**/(_*|.DS_Store)
O Zsh tem muitos outros recursos que faltam para o bash, mas só esse vale a pena fazer a troca. Está disponível na maioria das distribuições (provavelmente todas) do Linux, assim como no cygwin e no OS X.
Você pode encontrar mais informações no site zsh .
**
também :-) (embora não por padrão, shopt -s globstar
precisa ser definido)
find . -name "FILE-TO-FIND"-exec rm -rf {} \;
find
que o suporte, +
é semelhante ao xargs: find . -name "FILE-TO-FIND" -exec rm -rf {} +
- (também, você está perdendo um espaço antes -exec
)
Exemplo para excluir "Thumbs.db" recursivamente;
find . -iname "Thumbs.db" -print0 | xargs -0 rm -rf
Validar por:
find . -iname "Thumbs.db"
Agora, isso não deve exibir nenhuma das entradas com "Thumbs.db", dentro do caminho atual.
xargs
e em print0
vez de exec
(existem motivos).
É melhor ver o que está removendo adicionando -print a esta resposta
find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete -print
se você tiver o Bash 4.0 ++
#!/bin/bash
shopt -s globstar
for file in /var/www/html/**/.DS_Store /var/www/html/**/._
do
echo rm "$file"
done
Algumas coisas a serem observadas:
'-delete' não é recursivo. Portanto, se .TemporaryItems (folder) tiver arquivos, o comando falhará.
Existem muitos desses arquivos irritantes criados por macs: .DS_Store ._. DS_Store .TemporaryItems .apdisk
Este comando aborda todos eles. Evita a execução de encontrar repetidas vezes para várias correspondências.
find /home/foo \( -name '.DS_Store' -or -name '._.DS_Store' -or -name '._*' -or -name '.TemporaryItems' -or -name '.apdisk' \) -exec rm -rf {} \;
Isso também funciona:
sudo rm -rf 2018-03-*
aqui seus arquivos são excluídos com nomes do formato 2018-03- (outra coisa)
mantenha simples
sudo
nem fornece informações sobre como rm
funciona no contexto da sua resposta.