Bash: рекурсивно удалять файлы
Есть ли у кого-нибудь решение удалить эти файлы pesky._ и .DS_Store, которые можно получить после перемещения файлов с Mac на Linux Server?
укажите стартовый каталог и отпустите его? как/var/www/html/down...
Ответы
Ответ 1
перейдите в каталог и используйте:
find . -name ".DS_Store" -print0 | xargs -0 rm -rf
find . -name "._*" -print0 | xargs -0 rm -rf
Не тестировалось, сначала попробуйте их без xargs!
Вы можете заменить период после поиска с помощью каталога вместо того, чтобы сначала перейти в каталог.
find /dir/here ...
Ответ 2
find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete
Ответ 3
Новый findutils поддерживает -delete, поэтому:
find . -name ".DS_Store" -delete
будет работать для вас, если у вас есть современная система POSIX. По крайней мере, он работает для меня на OS X 10.8,
Кредит @ephemient в комментарии к сообщению @X-Istence (подумал, что это было достаточно полезно, чтобы оправдать его собственный ответ).
Ответ 4
Простая команда:
rm `find ./ -name '.DS_Store'` -rf
rm `find ./ -name '._'` -rf
Удачи!
Ответ 5
cd /var/www/html && find . -name '.DS_Store' -print0 | xargs -0 rm
cd /var/www/html && find . -name '._*' -print0 | xargs -0 rm
Ответ 6
Вы можете переключиться на zsh вместо bash. Это позволяет использовать ** для соответствия файлам в любом месте дерева каталогов:
$ rm /var/www/html/**/_* /var/www/html/**/.DS_Store
Вы также можете комбинировать их следующим образом:
$ rm /var/www/html/**/(_*|.DS_Store)
У Zsh есть много других функций, которых не хватает bash, но один из них стоит сделать для этого переключателя. Он доступен в большинстве (возможно, всех) дистрибутивов Linux, а также в cygwin и OS X.
Дополнительную информацию можно найти на zsh site.
Ответ 7
find . -name "FILE-TO-FIND"-exec rm -rf {} \;
Ответ 8
Пример для удаления "Thumbs.db" рекурсивно;
find . -iname "Thumbs.db" -print0 | xargs -0 rm -rf
Подтвердить по:
find . -iname "Thumbs.db"
Это должно теперь не отображаться ни одна из записей с "Thumbs.db" внутри текущего пути.
Ответ 9
Лучше посмотреть, что удаляется, добавив -print в этот ответ
find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete -print
Ответ 10
если у вас есть Bash 4.0 ++
#!/bin/bash
shopt -s globstar
for file in /var/www/html/**/.DS_Store /var/www/html/**/._
do
echo rm "$file"
done
Ответ 11
Несколько замечаний:
'- delete' не является рекурсивным. Так что если .TemporaryItems(папка) имеет в нем файлы, команда не работает.
Есть много этих отвратительных файлов, созданных macs:
.DS_Store
._. DS_Store
.TemporaryItems
.apdisk
Эта одна команда адресует все из них. Сохраняет результаты поиска снова и снова для нескольких совпадений.
find /home/foo \( -name '.DS_Store' -or -name '._.DS_Store' -or -name '._*' -or -name '.TemporaryItems' -or -name '.apdisk' \) -exec rm -rf {} \;