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 {} \;