Estou rodando no Debian stable, Cinnamon DE e tenho alguns arquivos que gostaria de excluir com uma linha de comando (por enquanto excluo esses arquivos com o Nemo).
Por exemplo, esses .txt
arquivos começam com '?' no shell e no Nemo este '?' é substituído por um retorno de carro:
$@debian: ls
ssolveIncpUL46pK ?ssolveIncpUL46pK.txt
Eu tentei:
rm ?ss*
rm \?ss*
rm \ ss*
A maneira apropriada de remover esse tipo de arquivo é usando o
inode
valor do arquivo.Use o seguinte comando para obter o
inode
valorO primeiro campo do resultado da lista longa é o valor do inode.
Em seguida, use o comando find para excluir o arquivo wrt inode.
O personagem não é um ponto de interrogação. O
ls
utilitário substituirá os caracteres não imprimíveis por?
. Ainda não está claro se o caractere não imprimível é realmente o primeiro caractere no nome do arquivo ou se pode haver um ou vários espaços antes disso.Você gostaria de excluir ambos os arquivos, você poderia combinar a "parte ruim" com
*
e, em seguida, especificar o restante do nome do arquivo visível mais de perto:Isso expandiria primeiro o padrão fornecido para todos os nomes de arquivo correspondentes e, em seguida
rm
, os removeria. Seja mais específico e especifique uma parte maior do nome do arquivo se houver arquivos que você não deseja excluir que correspondam ao padrão curto acima, por exemplo, comIsso pressupõe que você esteja localizado no mesmo diretório dos arquivos que deseja excluir.
A
-i
opçãorm
faz com que peça confirmação antes de realmente excluir qualquer coisa.Não é recomendado usar um
*
para remover arquivos. Pode combinar mais do que você gosta.Estando no Debian, o
ls
comando (do GNU) é capaz de imprimir os valores dos arquivos na forma citada [ 1 ] :Ou, melhor ainda, liste arquivos com nomes e inodes entre aspas:
Em seguida, use rm com o número do inode para garantir que apenas os arquivos corretos sejam removidos:
A chamada para find é limitada a um sistema de arquivos (
-xdev
) para evitar a correspondência de um arquivo em outro sistema de arquivos com o mesmo número de inode. Observe também querm
está sendo chamado com a-i
opção (interativa), portanto, ele perguntará na linha de comando se cada arquivo deve ser apagado.[ 1 ] Observe que isso não resolve o problema com caracteres visualmente confusos como um cirílico
а
($'\U430') e um latima
($'\U61') que parecem exatamente iguais, mas não são. Para ter uma visão melhor dos bytes que um nome de arquivo está usando, precisamos usar um visualizador hexadecimal;