Хтось має рішення видалити ті примхливі файли ._ та .DS_Store, які ви отримуєте після переміщення файлів з Mac на сервер Linux?
вказати стартовий каталог і відпустити його? як / var / www / html / down ...
Хтось має рішення видалити ті примхливі файли ._ та .DS_Store, які ви отримуєте після переміщення файлів з Mac на сервер Linux?
вказати стартовий каталог і відпустити його? як / var / www / html / down ...
Відповіді:
перейдіть до каталогу та скористайтеся:
find . -name ".DS_Store" -print0 | xargs -0 rm -rf
find . -name "._*" -print0 | xargs -0 rm -rf
Не перевірено, спробуйте їх без xargs спочатку!
Ви можете замінити період після пошуку, директорією, а не спочатку переходити до каталогу.
find /dir/here ...
-delete
дію, яка може скоротити це. @JT: Цей пошук проводиться рекурсивно під .
. Залежить від того, скільки файлів і підкаталогів існує ... Ви не можете просто заборонити завантажувати їх?
-r
прапора (рекурсивного) в цьому випадку не рекомендується, оскільки ви не хочете видаляти жодні каталоги ..
command rm
було б кращим (тобто більш прямим) рішенням? (Під "прямим" я маю на увазі, що він розглядає конкретно проблему, що існує, і більше нічого, тому менше шансів на те, щоб виникнути небажані побічні ефекти, а також буде більш зрозумілим для тих, хто повинен підтримувати код пізніше.)
Більш нові підтримують файли -delete
, тому:
find . -name ".DS_Store" -delete
Додати, -print
щоб отримати також список видалень.
Команда працюватиме для вас, якщо у вас є сучасна система POSIX, я вважаю. Принаймні, це працює для мене в OS X 10.8 і працює для інших, хто протестував його на macOS 10.12 (Mojave).
Подяка @ephemient у коментарі до повідомлення @ X-Istence (він вважав, що це досить корисно, щоб гарантувати власну відповідь).
find
за замовчуванням рекурсує у поточний робочий каталог.
.
на macOS 10.12 (Сьєрра).
Проста команда:
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 є безліч інших функцій, яких бракує, але лише одна варта переключитися. Він доступний у більшості (мабуть, усіх) 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
(є причини).
Краще побачити, що видаляється, додавши до цієї відповіді -принт
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' не є рекурсивним. Отже, якщо .TemvremeItems (папка) містить файли, команда не працює.
Існує дуже багато цих примхливих файлів, створених Mac: .DS_Store ._. DS_Store .TemvremeItems .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
працює в контексті вашої відповіді.