Поиск и удаление файлов по списку.

vs220
Может символ переменная какие , попробуйте двойные кавычки для имени вместо одинарных
Сейчас перенес всю лабуду уровнем выше, чтоб вложеность к скрипту не более 4-х каталогов - все работает. Но хотелось бы чтоб заработало в штатном расположении.
Буду пробовать с кавычками.
Кстати, если есть спецсимволы, то find эти файлы не удаляет, или не видит.
vadik, вопрос - файлы могут находится как в /home так и / .... или только в /home ???
Ошибки не исчезают с опытом - они просто умнеют
Текс. Заработало.
cat delete.txt |xargs -I _ find . -type f -name '_' -delete
Берет файл со списком рядом со скриптом и ищет начиная со своего каталога. Если вложеность каталогов относительно расположения скрипта не более 4-х - все отрабатывает штатно. find с точкой вместо пути начинает искать с места запуска скрипта и ниже, соответственно предыдущие 100500 каталогов игнорятся в указании пути и проблема с вложеностью обходится.
Сейчас поковыряю гугл отностительно вложености, русских букв и спецсимволов в имени.
vasek, есть каталог в произвольно месте. Ну не совсем произвольном, но где-то в недрах. В него скидываются различные каталоги с данными для "очистки". Затем "очищенные" каталоги переносятся на свои законные места.
Т.е. местоположение скрипта жестко не привязано. Все промежуточные файлы создаются в /tmp, а логи остаются рядом со скриптом.
Самих скриптов два. Один только ищет и выводит в лог недостающие и лишние файлы, а второй, тот над которым я сейчас колдую - должен сразу найти и удалить файлы которые разбросаны по "подопытному" каталогу, но не нужны для использования в данном конкретном случае.
Вещь узкоспециализированная и редко-применяемая. Поэтому нужно максимально автоматизировать и уменьшить количество ручного вмешательства.
К тому же, если вдруг файлы были удалены ошибочно, их несложно восстановить.

Кстати, ваш код работает намного быстрее find, но почему-то у меня начал выдавать ошибку
sh: 1: Syntax error: "(" unexpected
Хотя я пробовал явно указывать полные пути к нужным файлам.
В целом вопрос можно считать решенным. Спасибо всем отписавшимся. Вы мне все реально помогли.
На сейчас остановился на варианте
cat delete.txt |xargs -I _ find . -type f -name '_' -delete
Проблем с вложеностью каталогов относительно скрипта нет. Файл со списком удаленных файлов сохраняется.
Остался вопрос по спецсимволам, но это скорее "на всякий случай", поскольку в используемой системе такие файлы не должны появляться в принципе.
[РЕШЕНО] пока не ставлю, вдруг у кого-то еще появятся интересные идеи.
Скрипт с удалением .... в качестве запасного варианта ...
Имеем список
cat ~/list.txt
del-1
del-2
del-3
Смотрим где они находятся
find -name 'del-*'
./del-3
./TTT/TEST/del-1
./TTT/TEMP/1/del-2

Имеем скрипт
#!/bin/bash
cd /
cat ~/list.txt | while IFS= read line
     do
           sh -c  'find  `pwd` -name  '$line' 2> /dev/null -delete'
     done
 exit 0

Запуск:
1. Проверка без удаления (удалил в скрипте -delete) … получаем в терминале вывод
~/test.sh
/home/vasek/TTT/TEST/del-1
/home/vasek/TTT/TEMP/1/del-2
/home/vasek/del-3
… все верно …

2. Проверка с удалением (вернул на -delete на место) …. после работы скрипта … файлы удалены
find -name 'del-*'
   … пусто ...

PS -
vadik
Все промежуточные файлы создаются в /tmp
Если удалаемые файлы находятся только в /tmp , то для ускорения работы скрипта разумнее:
вместо строчки cd / прописать cd /tmp .... если будет другое, то для ускорения можно прописать и другое ...
Ошибки не исчезают с опытом - они просто умнеют
vasek
Скрипт с удалением …. в качестве запасного варианта …
Если не трудно, имеет ли какие-нибудь преимущества ваш вариант, над вариантом из моего предыдущего сообщения? Для несведущего выбранный мной вариант выглядит просто читабельнее и проще к восприятию.
vadik
Если удалаемые файлы находятся только в /tmp
в /tmp я использую промежуточные файлы. По той простой причине, что записать какие-то промежуточные действия в файл, а затем прочитать этот файл, провести манипуляции с данными и записать в другой файл для меня по силам.
А всякие полезные потоковые перенаправления и обработка на лету - темный лес. Что и доказывает созданная тема.
vadik
имеет ли какие-нибудь преимущества ваш вариант, над вариантом из моего предыдущего сообщения?
Все дело вкуса, кто к чему привык - каждый выбирает то, что ему понятно и привычно.
Особых преимуществ на 1-ый взгяд у них нет. О сравнении можно судит только после отработки (большой список, раскиданость файлов и др.), плюс удобство запуска (системы у всех разные ... и привычки запуска тоже разные), иногда удобно иметь возможность выбора директории удаления и др.

PS - если больше нравится одной командой
vadik
cat delete.txt |xargs -I _ find . -type f -name '_' -delete
то можно и такой вариант - в котором вместо xargs используется while read ; do
cat delete.txt | while read f; do find . -type f -name "$f" -delete; done
Спорно, но не которые считают, что лучше передать список конвейером и обрабатывать имена по одному.

... пусть все будет в одном месте ...

PS 2 - с удалением по не полному названию нужно быть очень осторожном - в системе всегда имеются файлы с одинаковыми названиями ... и лучше лишний раз перепроверить ...
Ошибки не исчезают с опытом - они просто умнеют
vasek, спасибо. При случае попробую и ваш вариант. Сейчас просто некогда проводить вдумчивые тесты.
vasek
с удалением по не полному названию нужно быть очень осторожном
я оперирую полным именем файла с расширением. Но без путей. С учетом, что вся обработка идет в специально выделенном каталоге - проблем быть не должно в принципе. Ну и не настолько все критично в данном случае.
 
Зарегистрироваться или войдите чтобы оставить сообщение.