Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование в *nix (http://forum.oszone.net/forumdisplay.php?f=35)
-   -   Удаление файлов со служебными символами в названии (http://forum.oszone.net/showthread.php?t=337426)

UserName1989 28-10-2018 12:31 2838080

Удаление файлов со служебными символами в названии
 
Добрый день!
Имеется скрипт для удаления всех файлов из папки, кроме трёх последних:
Код:

find . -type f | head -n -3 | xargs -0 rm
Но возникает ошибка: No such file or directory.
Каким образом это можно исправить?

Dimon 28-10-2018 20:35 2838161

Пусть $% file - это файл со спецсимволами в имени.
1. Взять имя файла в двойные или одинарные кавычки:
PHP код:

rm '$  %file' 

2. Экранировать спецсимволы в имени файла используя '\'
3. Добавить "--" перед rm:
PHP код:

rm --- "$%  file" 

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

ls -li dirname
# Например inode нужного файла будет 123456
find . -inum 123456 -delete 


CyberDaemon 14-11-2018 11:47 2840692

Цитата:

Цитата UserName1989
Имеется скрипт »

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

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

find . -type f | head -n -3
это именно то, что планируется стереть?

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

UserName1989 14-11-2018 16:33 2840729

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

Код:

find . -maxdepth 1 -type f | head -n -$FileCount | xargs rm
"Последние" - по алфавиту.
Планируется стереть все файлы, кроме последних $FileCount.


Время: 13:05.

Время: 13:05.
© OSzone.net 2001-