#!/bin/bash
# del covers
DIR=/home/disk/Download/Дмитрий
for files in $(find $DIR -name "сovers")
do
rm -rf $files
done
if [ $? = 0 ]; then
echo "Yes...files was deleted..by...by!"
fi
Папка covers как была так и остается в директории, но через это работает:
Путь в параметре -name сработать не может в принципе, там должно быть только имя. Вероятно, вы неправильно переписали команду на форум, или же ошибаетесь, считая, что она сработала.
Да вроде такая конструкция работать должна, скорее всего путь не тот, ну и если путь содержит пробелы, то следует его заключить в кавычки.
проверьте вывод подставив вместо rm -rf $files команду echo $files и просмотрите вывод.
Путь в параметре -name сработать не может в принципе, там должно быть только имя. Вероятно, вы неправильно переписали команду на форум, или же ошибаетесь, считая, что она сработала.
Да вроде такая конструкция работать должна, скорее всего путь не тот, ну и если путь содержит пробелы, то следует его заключить в кавычки.
проверьте вывод подставив вместо rm -rf $files команду echo $files и просмотрите вывод.
Нет, все равно не получается. Путь верный, с этим путем если просто указать find, то он их находит и удаляет.
Наберите (а лучше скопипастите в терминал) последовательно следующие строки:
cd
ls -d /home/disk/Download/Дмитрий
find /home/disk/Download/Дмитрий -name covers
cd /home/disk/Download/Дмитрий
find . -name covers
и приведите подробный вывод каждой. Сделайте точную копипасту из терминала, от первой команды до последнего вывода.
Поскольку я сейчас ухожу, то привожу здесь свои подозрения, не дожидаясь их подтверждения или опровержения.
Если /path/to/dir - симлинк на каталог, а не каталог, то find /path/to/dir найдёт только сам /path/to/dir. В то же время find /path/to/dir/ (обратите внимание на слэш в конце) будет искать внутри каталога. Если это у вас действительно симлинк, то можете не приводить информацию, про которую я говорил, поскольку ответ будет уже найден. Если же нет, то приведите её, и, возможно, кто-то, основываясь на ней, поможет вам.
#!/bin/bash
# del covers
DIR=/home/disk/Download/Дмитрий
for files in $(find $DIR -name "сovers")
do
rm -rf $files
done
if [ $? = 0 ]; then
echo "Yes...files was deleted..by...by!"
fi
вам уже сказали про пробелы в имени. собственно, так лучше не делать.
QUOTE писал(а):И даже если так сделать, то все равно не удаляется:
#!/bin/bash
# del covers
DIR=/home/disk/Download/Дмитрий
find $DIR -name "covers" -exec rm -rf {} \;
if [ $? = 0 ]; then
echo "Yes...files was deleted..by...by!"
fi
я думаю, что всё-таки удаляется. но find завершается с ошибкой и, следовательно, сообщение "Yes...files was deleted..by...by!" не выводится.
чтобы find не завершался с ошибкой, надо добавить параметр -depth:
find $DIR -depth -name "covers" -exec rm -rf {} \;
#!/bin/bash
DIR=/home/disk/Download/Дмитрий
find $DIR -name "covers"|while read files
do
rm -rf "$files"
done
if [ $? = 0 ]; then
echo "Yes...files was deleted..by...by!"
fi
Если бы эти команды выдавали переход к другой строке, ато показывает вопрос вместо перехода cove?rs
реально действует для удаления find . -name "`echo -en 'cove\nrs'`" -delete
Какие несчастливые люди: половина темы про то, как правильно получать от find имена файлов. Вам так нужна скорость find? Если нет, то с данной конкретной задачей справляется даже bash globbing, не то что zsh: rm -rf $DIR/**/covers (лучше всего в zsh: по-умолчанию это вернёт ошибку если ничего не найдено, тогда как в bash попытается удалить $DIR/**/covers, да ещё и потребуются двойные штрихи вокруг $DIR). Требует установки какой-то настройки в bash.