Войти

Показать полную графическую версию : Удаление файлов со служебными символами в названии


UserName1989
28-10-2018, 12:31
Добрый день!
Имеется скрипт для удаления всех файлов из папки, кроме трёх последних:
find . -type f | head -n -3 | xargs -0 rm
Но возникает ошибка: No such file or directory.
Каким образом это можно исправить?

Dimon
28-10-2018, 20:35
Пусть $% file - это файл со спецсимволами в имени.
1. Взять имя файла в двойные или одинарные кавычки: rm '$ %file'
2. Экранировать спецсимволы в имени файла используя '\'
3. Добавить "--" перед rm:rm -v -- "$% file"
4. Можно удалить файл по inode: ls -li dirname
# Например inode нужного файла будет 123456
find . -inum 123456 -delete

CyberDaemon
14-11-2018, 11:47
Имеется скрипт »
Результат работы этого скрипта может сильно отличаться от ожидаемого:
- если есть подкаталоги - то find спустится туда и выдаст файлы еще и из них.
- "последние файлы" - это по какому критерию?

отображаемый результат команды
find . -type f | head -n -3
это именно то, что планируется стереть?

А ошибка возникает вовсе не из-за спецсимволов, а из-за -0 в опциях xargs

UserName1989
14-11-2018, 16:33
CyberDaemon, изменил глубину поиска

find . -maxdepth 1 -type f | head -n -$FileCount | xargs rm

"Последние" - по алфавиту.
Планируется стереть все файлы, кроме последних $FileCount.




© OSzone.net 2001-2012