Exclui o arquivo de pontos somente se existir um arquivo não pontual em * nix

0

Estou movendo arquivos de um sistema de arquivos FAT32 para um sistema de arquivos EXFAT em um Mac. Meu entendimento é que o FAT32 não suporta atributos de arquivos estendidos, então criou arquivos de ponto para cada arquivo.

No entanto, agora que copiei tudo em um sistema de arquivos exFAT, gostaria de excluir esses arquivos de ponto. Existe uma maneira de copiar um arquivo de pontos, mas somente se existir um arquivo não pontual no mesmo diretório (assim, posso evitar a exclusão de arquivos de pontos que são arquivos de configuração).

Isso seria em um Mac CLI.

Obrigado!

    
por zundi 23.02.2018 / 18:06

2 respostas

1

Crie um script de shell executável:

#!/bin/bash
for dotfile ; do
    path=${dotfile%/.*}
    name=${dotfile##*/.}
    if [[ -f $path/$name ]] ; then
        rm "$dotfile"
    fi
done

Em seguida, execute a partir do topo do diretório que você deseja limpar:

find -name '.*' -exec rm-dotfiles.sh {} +

Onde rm-dotfiles.sh é o nome do script.

    
por 23.02.2018 / 18:27
0

A remoção de um arquivo de pontos somente se o arquivo não-dot correspondente existir é a mesma coisa que remover o arquivo de pontos correspondente para todos os arquivos que não sejam dot. Então:

for f in *; do rm -f ".$f"; done

Observe que o * acima normalmente corresponde apenas a arquivos não pontuais, a menos que você tenha feito shopt -s dotglob (nesse caso, é melhor redefinir antes de emitir o comando).

Uma versão recursiva de diretório seria:

for f in $(find -type f -name '[^.]*');do rm -f "$(dirname $f)/.$(basename $f)";done

(o padrão de nome em find exclui arquivos de ponto)

    
por 23.02.2018 / 23:07