Есть ли у кого-нибудь решение для удаления этих надоедливых файлов ._ и .DS_Store, которые появляются после перемещения файлов с Mac на Linux Server?
указать начальный каталог и отпустить? например / var / www / html / down ...
Есть ли у кого-нибудь решение для удаления этих надоедливых файлов ._ и .DS_Store, которые появляются после перемещения файлов с Mac на Linux Server?
указать начальный каталог и отпустить? например / var / www / html / down ...
Ответы:
перейдите в каталог и используйте:
find . -name ".DS_Store" -print0 | xargs -0 rm -rf
find . -name "._*" -print0 | xargs -0 rm -rf
Не тестировалось, сначала попробуйте их без xargs!
Вы можете заменить точку после find на каталог вместо того, чтобы сначала переходить в каталог.
find /dir/here ...
-deleteдействие, которое может сократить это. @JT: рекурсивный поиск в .. Зависит от того, сколько там файлов и подкаталогов ... не можете ли вы просто запретить их загрузку?
-r(рекурсивного) флага в этом случае не рекомендуется, поскольку вы не хотите удалять какие-либо каталоги ..
command rmбыло бы лучшего (то есть более прямого) решения? (Под "прямым" я подразумеваю, что он имеет дело именно с рассматриваемой проблемой и ничем другим, и, следовательно, с меньшей вероятностью будет иметь какие-либо нежелательные побочные эффекты, а также будет более понятным для всех, кто должен поддерживать код позже.)
Более новая версия findutils поддерживает -delete:
find . -name ".DS_Store" -delete
Добавить, -printчтобы также получить список удалений.
Я считаю, что команда будет работать на вас, если у вас есть современная система POSIX. По крайней мере, он работает для меня в OS X 10.8 и работает для других, кто тестировал его в macOS 10.12 (Mojave).
Кредит @ephemient в комментарии к сообщению @ X-Istence (подумал, что это было достаточно полезно, чтобы оправдать собственный ответ).
findпо умолчанию выполняется рекурсивный переход в текущий рабочий каталог.
.macOS 10.12 (Sierra).
Простая команда:
rm `find ./ -name '.DS_Store'` -rf
rm `find ./ -name '._'` -rf
Удачи!
rm -i находку ./ -name '* py'` -rf , which did NOT prompt me to delete files. you will need to take it on the end (i.e. -rfi`). Слава богу за мой сценарий резервного копирования.
-bash: /bin/rm: Argument list too long
cd /var/www/html && find . -name '.DS_Store' -print0 | xargs -0 rm
cd /var/www/html && find . -name '._*' -print0 | xargs -0 rm
Вы можете переключиться на zsh вместо bash. Это позволяет использовать ** для сопоставления файлов в любом месте дерева каталогов:
$ rm /var/www/html/**/_* /var/www/html/**/.DS_Store
Вы также можете комбинировать их так:
$ rm /var/www/html/**/(_*|.DS_Store)
У Zsh есть много других функций, которых не хватает bash, но только на эту стоит переключиться. Он доступен в большинстве (возможно, во всех) дистрибутивах Linux, а также в cygwin и OS X.
Вы можете найти дополнительную информацию на сайте zsh .
**тоже поддерживает :-) (хотя и не по умолчанию, shopt -s globstarнеобходимо установить)
find . -name "FILE-TO-FIND"-exec rm -rf {} \;
findподдерживающий его, +он похож на xargs: find . -name "FILE-TO-FIND" -exec rm -rf {} +- (также вы пропустили пробел раньше -exec)
Пример рекурсивного удаления "Thumbs.db";
find . -iname "Thumbs.db" -print0 | xargs -0 rm -rf
Подтвердить:
find . -iname "Thumbs.db"
Теперь это не должно отображать какие-либо записи с «Thumbs.db» внутри текущего пути.
xargsи print0вместо exec(есть причины).
Лучше увидеть, что удаляется, добавив к этому ответу -print
find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete -print
если у вас Bash 4.0 ++
#!/bin/bash
shopt -s globstar
for file in /var/www/html/**/.DS_Store /var/www/html/**/._
do
echo rm "$file"
done
Несколько замечаний:
'-delete' не рекурсивен. Поэтому, если .TemporaryItems (папка) содержит файлы, команда не выполняется.
Существует множество этих надоедливых файлов, созданных Mac: .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 {} \;
Это тоже работает:
sudo rm -rf 2018-03-*
вот ваши удаляющие файлы с именами формата 2018-03- (что-то еще)
будь проще
sudoи не предоставляете никакой информации о том, как это rmработает в контексте вашего ответа.