Bash помогите удалить вложенные каталоги - PullRequest
1 голос
/ 15 октября 2019

Хорошо, это может показаться странным, но у меня есть каталог / PDB /, который я хочу отсканировать для всех содержащихся в нем каталогов. Все эти каталоги содержат несколько файлов и имя подкаталога / карманы /, которые могут быть или не быть пустыми. Я хочу удалить каждый родительский каталог и все его содержимое, которое содержит пустой подкаталог / pockets /. Пока у меня есть этот код:

cd /PDB/
for D in */
do
   find -maxdepth 1 -type d -empty -exec rm -r $D +
done

В настоящее время он не выполняется, что дает ошибку поиска: отсутствует аргумент для '-exec'

Ранее я использовал {} вместо $ Dно это только удалило пустой подкаталог.

1 Ответ

4 голосов
/ 15 октября 2019

Я бы не стал использовать find здесь вообще. Подумайте:

#!/usr/bin/env bash
#              ^^^^ - NOT /bin/sh; using bash-only features here

shopt -s nullglob           # if no matches exist, expand to an empty list
for d in /PDB/*; do         # iterate over subdirectories
  set -- "$d"/pockets/*     # set argument list to contents of pockets/ subdirectory
  (( "$#" )) && continue      # if the glob matched anything, we aren't empty
  rm -rf -- "${d%/pockets/}"  # if we *are* empty, delete the parent directory
done

... или, если вы действительно хотите использовать find:

find /PDB -type d -name pockets -empty -exec bash -c '
  for arg; do
    rm -rf -- "${arg%/*}"
  done
' _ {} +
...