find: используя {} в пути

Я случайно скопировал папки в каталоге Music в родительский каталог michal . Я хочу удалить эти каталоги одним махом.

Есть ли способ сделать следующую работу? Или есть лучшая альтернатива?

 /home/michal/Music $ find . -type d -maxdepth 1 -exec rm -r ../{} \; 

Очевидно, что {} не заменяется, потому что вышеприведенное возвращает

 rm: ../{}: No such file or directory rm: ../{}: No such file or directory rm: ../{}: No such file or directory ... 

2 Solutions collect form web for “find: используя {} в пути”

Команда find отлично работает для меня с GNU find . Если он не работает в вашей системе, попробуйте:

 find . -maxdepth 1 -type d -exec sh -c 'rm -r "../$1"' Rm {} \; 

В этом подходе используется {} как независимый аргумент, не модифицированный ../ . Мы передаем значение {} в оболочку, а оболочка применяет ../ .

Заметки:

  1. Порядок -maxdepth 1 и -maxdepth 1 -type d был отменен, поскольку man find рекомендует, чтобы глобальные параметры, такие как -maxdepth , определялись перед позиционными параметрами типа -type .

  2. Команда оболочки должна быть в одиночных кавычках: 'rm -r "../$1"' . Если бы это было в двойных кавычках, исходная оболочка заменила бы ее значение на $1 , и имя каталога, найденное find было бы проигнорировано. Нам нужно, чтобы вызванный sh выполнял подстановку. Строка "../$1" находится в двойных кавычках для защиты имени каталога, $1 , от разбиения слова и расширения пути.

  3. Оболочка назначает строку Rm $0 . Это не используется, если не появляется сообщение об ошибке. Следовательно, можно использовать любую строку.

С zsh :

 cd /home/michal && rm -rf -- Music/*(/D:t) 

Квалификатор / glob должен выбирать только каталоги, D включать скрытые, а модификатор :t , как в расширении истории, – это выбрать только хвост (имя файла без его части каталога).

С любой борнеподобной оболочкой:

 cd /home/michal/Music && set -- */ && cd .. && rm -rf -- "$@" 

Одно из отличий от вышесказанного состоит в том, что он также будет включать символические ссылки в каталоги (и удалит контент цели вместо самой ссылки).

  • Команда поиска возвращает неверные файлы
  • Как создать копию файла в нескольких каталогах?
  • find и md5sum не дают никакого выхода (find -o limit?)
  • find: удалить папку и подпапки, но добавить исключение в два файла
  • Список символических ссылок в текущем каталоге?
  • «найти» по каталогам с именем ... / dirnameXX / ... с переменной XX
  • найти выход на 1-й найденный и возвращаемый код
  • Рекурсивная находка, которая не находит скрытые файлы или рекурсии в скрытые директории
  • Найти все .php-файлы внутри каталогов с доступными для записи разрешениями
  • ls или find, чтобы исключить двоичные файлы
  • Как вычислить общий размер файла, который вы искали с помощью команды «Найти»
  • Linux и Unix - лучшая ОС в мире.