Как я рекурсивно удаляю каталоги с подстановочным знаком?

Похож на Вас, нуждаются в этом:

move-window [-rdk] [-s src-window] [-t dst-window]
              (alias: movew)
        This is similar to link-window, except the window at src-window
        is moved to dst-window.  With -r, all windows in the session are
        renumbered in sequential order, respecting the base-index option.

Вызов movew без параметров перемещает текущее окно в первое свободное положение. movew -r перенумерует все окна сразу.

54
15.11.2016, 05:33
5 ответов

find очень полезно для того, чтобы выборочно выполнить действия с целым деревом.

find . -type f -name ".Apple*" -delete

Здесь, -type f удостоверяется, что это - файл, не каталог, и не может быть точно, что Вы хотите, так как это также пропустит символьные ссылки, сокеты и другие вещи. Можно использовать ! -type d, который буквально означает не каталоги, но затем Вы могли бы также удалить устройства посимвольного ввода-вывода и блочные устройства. Я предложил бы смотреть на -type предикат на странице справочника для find.

Чтобы сделать это строго с подстановочным знаком, Вам нужна усовершенствованная поддержка оболочки. Bash v4 имеет globstar опция, которая позволяет Вам рекурсивно соответствовать использованию подкаталогов **. zsh и ksh также поддерживайте этот шаблон. Используя это, можно сделать rm -rf **/.Apple*. Это не стандартно POSIX, и не очень портативно, таким образом, я избегал бы использования его в сценарии, но для одноразового интерактивного действия оболочки, это прекрасно.

75
27.01.2020, 19:33
  • 1
    комментария, который я могу получить find . -type d -name .Apple* для работы - это перечисляет все папки. Однако это перестало работать, когда я добавляю -delete в конце. Это просто возвращается со сводкой использования. Это работает на BusyBox v1.1.1. Это имеет значение? –  codedog 30.10.2011, 03:33
  • 2
    -delete не POSIX также. ** был представлен zsh в начале 90-х. Это теперь (хронологическим порядком появления) также в ksh93, рыбе, ударе и tcsh. –  Stéphane Chazelas 10.09.2014, 23:19
  • 3
    +1 для rm -rf **/.Apple* –  Andriy Boyko 13.07.2016, 15:37
  • 4
    @codedog, если -delete не работает использование -exec rm -f {} + вместо этого. –  Wildcard 15.11.2016, 05:36
  • 5
    Можете Вы добираться find быть подробным, поскольку это удаляет? Я предполагаю, что "globstar" метод сделал бы это путем добавления -v переключатель. –  Demis 28.02.2018, 00:02

То, что возможно, - то, что нет ничего неправильно с Вашей командой комнаты/находить, но что пользователь, с которым Вы зарегистрированы, на самом деле не имеет, удаляют полномочия. Использовать ls -l для списка вещей с их полномочиями, и можно определить, кто Вы с id и groups команды (любой должен быть доступным). Если бы Вы - "неправильный пользователь", чтобы сделать это, Вы должны были бы или изменить полномочия/владение файлов или переключиться на другого пользователя.

0
27.01.2020, 19:33

Попытка:

shopt -s dotglob           # using Bash
printf '%s\n' ./.Apple*    # test
#rm -rf ./.Apple*    
0
27.01.2020, 19:33

Простая команда:

rm `find ./ -name '.Apple*'` -rf

Удачи!

-1
27.01.2020, 19:33
  • 1
    Это чрезвычайно подвержено ошибкам, найдите, имеет - исполнительный ключ. –  Anton Barkovsky 20.11.2011, 16:46

Это - пошаговое руководство на
, Как собрать и установить Гибридный язык и заставить его работать с Google Talk (~ Притоны) на Linux:

различия между Притонами и Google Talk вы найдете на этой странице:
https://support.google.com/a/answer/4564211

1. Включите проверку 2-Step на этой странице:
https://accounts.google.com/SmsAuthConfig

2-Step Verification

2. Создайте новый пароль приложения для Pidgin на этой странице, выберите Other и присвойте ему имя
https://security.google.com/settings/security/apppasswords

App password

3. Установите последнюю версию Pidgin для вашей системы с этой страницы:
https://pidgin.im/download/ или из репозитория дистрибутива Linux или скомпилируйте ее из источника (или для Max OS X они рекомендуют использовать http://adium.im/ )

4. Чтобы избежать ошибок безопасности, следует часто проверять, содержит ли репозиторий дистрибутива Linux последнюю доступную версию, которую можно проверить на этой странице https://pidgin.im/news/security/

5. Если вы принимаете решение собрать, вы просто устанавливаете зависимости, загружаете и собираете кодекс и устанавливаете Гибридный язык следующим образом:

$ sudo apt-get build-dep pidgin
$ sudo apt-get source pidgin
$ tar xjvf pidgin-2.x.y.tar.bz2
$ cd pidgin-2.x.y
$ ./configure && make && sudo make install

Поочередно, например, на Debian, где вы (по умолчанию) имеете к Су вместо sudo (не проверили меня, исправьте меня, если я неправ):

$ su -
# apt-get build-dep pidgin
# apt-get source pidgin
# exit
$ tar xjvf pidgin-2.x.y.tar.bz2
$ cd pidgin-2.x.y
$ ./configure && make
$ su -
# make install

, Если это терпит неудачу по некоторым причинам, пожалуйста, обратитесь к этой странице:
https://developer.pidgin.im/wiki/Installing%20Pidgin#WhycantIcompilePidgin

6. Щелкните правой кнопкой мыши по пиктограмме на панели задач Pidgin и выберите Счета .

7. Добавьте или измените учетную запись Google Talk так, чтобы Имя пользователя не содержало @ gmail.com или вашего домена.

8. Если у вас есть собственный домен для учетной записи Google, заполните поле Домен , в противном случае по умолчанию должны присутствовать gmail.com (без @).

9. Ресурс - это специфичная для XMPP вещь, позволяющая использовать несколько клиентов для одной и той же учетной записи. При обычных обстоятельствах оставьте пустым.

10. Введите Пароль , созданный на шаге 2.

11. Опционально, но удобно, если на безопасном компьютере установлен флажок Запомнить пароль .

12. Локальный псевдоним оставить пустым.

13. Он должен выглядеть следующим образом:

Adding Google Talk account to Pidgin

14. На вкладке Advanced убедитесь, что выбрана опция Require encryption и отключена опция open text .

15. Обратите внимание, что после сохранения этих настроекпротокол автоматически изменится на XMPP , который в настоящее время доступен для сторонних приложений, таких как Pidgin.

-121--184805-

Я столкнулся с проблемами при помощи find с -delete из-за намеренного поведения find (т.е. отказа от удаления, если путь начинается с ./, что они делают в моем случае), как указано на его странице:

  -delete

Удаление найденных файлов и/или каталогов. Всегда возвращает значение true. Это выполняется из текущего рабочего каталога как поиск рекурс в дереве. Он не будет пытаться удалить имя файла с символом «/» в пути относительно «». из соображений безопасности.
Эта опция подразумевает обработку проходов в первую очередь по глубине.
Следующие symlinks несовместимы с этим параметром.

Вместо этого я смог просто сделать

find . -type d -name 'received_*_output' -exec rm -r {} +

Для вашего случая, кажется, что цитирование глобуса (звездочка, *) было решением, но я хотел предоставить свой ответ на случай, если у кого-то еще будет похожая проблема.

ПРИМЕЧАНИЕ: Раньше мой ответ заключался в следующем, но @ Wildcard указал на недостатки безопасности в этом в комментариях.

find . -type d -name 'received_*_output' | xargs rm -r
17
27.01.2020, 19:33

Теги

Похожие вопросы