Como posso combinar 'SRM' e 'Localizar'?

1

Estou usando o SRM para excluir arquivos e diretórios com segurança. A maioria dos dados está em volumes FAT e NTFS desde que eu dualboot com o Windows (eu estou tentando usar o Ubuntu, tanto quanto possível e ficar longe do Windows).

No entanto, de vez em quando eu me deparo com um erro Error: File <filepath> - file is hardlinked 1 time(s), skipping! que descobri significa que há um link físico para o arquivo.

Eu fiz algumas pesquisas e descobri que a maneira NÃO-srm de excluir todos os arquivos vinculados é com o comando (exemplo :) $ sudo find ~ -xdev -samefile '/home/USERNAME/Desktop/hardlinks (copy).txt' | xargs rm

Infelizmente, o acima não funciona se eu substituir "RM" por "SRM" ...

Error: File /home/USERNAME/Desktop/hardlinks - No such file or directory
Error: File (copy).txt - No such file or directory
Error: File /home/USERNAME/Desktop/links.txt - file is hardlinked 1 time(s), skipping!

Existe uma maneira de obter o mesmo resultado: pesquisar links físicos para um arquivo específico e processá-los por meio do SRM ? De preferência com os argumentos -rvz (recursivo, verboso, sobrescrito com zero)?

nota: também tentei anexar -print0 a FIND e / ou -0 a XARGS, o que não ajudou

    
por tSquirrel 08.06.2014 / 16:06

1 resposta

1

Isso parece-me um problema geral em fazer coisas com arquivos em uma lista ... aqui a lista é criada com argumentos específicos para find (para encontrar os arquivos vinculados / dupe).

Eu pularia a agonia do uso direto de xargs em todos os arquivos que seu find cria ...

Em vez disso, eu criaria os comandos com find -printf e verificaria o que é produzido completamente e ENTÃO canalize-o para o bash com um anexo

 | bash

E lembre-se de que nomes de arquivos podem conter caracteres especiais; um espaço simples é um criador de problemas. Então, para começar, cite os nomes, sempre.

Exemplo, com um conjunto limitado de arquivos ( -maxdepth ):

find -maxdepth 1 -type f -printf 'file="%p"; echo $file ; rm "$file" \n'

... é um começo, para entender o que eu quero dizer acima ... e quando você termina, quando o resultado é o que você realmente espera - então escolha

find -maxdepth 1 -type f -printf 'file="%p"; echo $file ; rm "$file" \n' | bash

echo "echo 'test'" | bash 

imprime test , um caminho complexo para um eco simples, mas pode mostrar a ideia por trás do que está acima.

    
por Hannu 08.06.2014 / 18:13