Как я могу объединить "SRM" и "Найти"?
Я использую SRM для безопасного удаления файлов и каталогов. Большая часть данных находится на томах FAT и NTFS, поскольку я выполняю двойную загрузку с Windows (я стараюсь максимально использовать Ubuntu и держаться подальше от Windows).
Однако время от времени я сталкиваюсь с ошибкой Error: File <filepath> - file is hardlinked 1 time(s), skipping!
что я обнаружил, значит, есть жесткая ссылка на файл.
Я провел поиск и обнаружил, что NON-SRM способ удалить все связанные файлы с помощью команды (пример:) $ sudo find ~ -xdev -samefile '/home/USERNAME/Desktop/hardlinks (copy).txt' | xargs rm
К сожалению, вышеперечисленное не работает, если я заменю "RM" на "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!
Есть ли способ достичь того же результата: найти жесткие ссылки для определенного файла, а затем обработать их через SRM? Желательно с аргументами -rvz (рекурсивный, подробный, перезаписать с нуля)?
примечание: я также пытался добавить -print0
НАЙТИ и / или -0
к XARGS, который не помог
1 ответ
Это выглядит для меня как общая проблема при работе с файлами в списке... здесь список создается с конкретными аргументами find
(чтобы найти связанные / двойные файлы).
Я бы пропустил агонию прямого xargs
использование на любых файлах, которые ваш find
случается придумать...
Вместо этого я бы создал команды с find -printf
, и проверьте, что произведено полностью, и затем направьте это в bash с добавленной
| bash
И помните, что имена файлов могут содержать специальные символы; Простое ПРОСТРАНСТВО - источник проблем. Так что для начала приведите имена всегда.
Пример с ограниченным набором файлов (-maxdepth
):
find -maxdepth 1 -type f -printf 'file="%p"; echo $file ; rm "$file" \n'
... это начало, чтобы разобраться с тем, что я имею в виду выше... и когда вы закончите, когда результат будет именно тем, что вы на самом деле ожидаете - тогда переходите к
find -maxdepth 1 -type f -printf 'file="%p"; echo $file ; rm "$file" \n' | bash
echo "echo 'test'" | bash
распечатает test
, сложный способ для простого эха, но может показать идею позади того, что выше.