Удаление файлов со служебными символами в названии

Ответить
 • Просмотры: 3
Аватара пользователя
UserName1989

Удаление файлов со служебными символами в названии

Сообщение UserName1989 »

Добрый день!

Имеется скрипт для удаления всех файлов из папки, кроме трёх последних:



Код:

Код: Выделить всё

 find . -type f | head -n -3 | xargs -0 rm

Но возникает ошибка: No such file or directory.[/i]

Каким образом это можно исправить?
Аватара пользователя
Dimon

Re: Удаление файлов со служебными символами в названии

Сообщение Dimon »

Пусть $% file - это файл со спецсимволами в имени.

1. Взять имя файла в двойные или одинарные кавычки:

PHP код:

Код: Выделить всё

rm '$  %file' 






2. Экранировать спецсимволы в имени файла используя '\'

3. Добавить "--" перед rm:

PHP код:

Код: Выделить всё

rm -v -- "$%  file" 






4. Можно удалить файл по inode:

PHP код:

Код: Выделить всё

ls -li dirname

# Например inode нужного файла будет 123456

find . -inum 123456 -delete 



Аватара пользователя
CyberDaemon

Re: Удаление файлов со служебными символами в названии

Сообщение CyberDaemon »

Цитата UserName1989:



Имеется скрипт
Удаление файлов со служебными символами в названии




Результат работы этого скрипта может сильно отличаться от ожидаемого:

- если есть подкаталоги - то find спустится туда и выдаст файлы еще и из них.

- "последние файлы" - это по какому критерию?



отображаемый результат команды



Код:

Код: Выделить всё

find . -type f | head -n -3

это именно то, что планируется стереть?



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

Re: Удаление файлов со служебными символами в названии

Сообщение UserName1989 »

CyberDaemon, изменил глубину поиска





Код:

Код: Выделить всё

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

"Последние" - по алфавиту.

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

Вернуться в «Программирование в *nix»