Если вы хотите удалить соответствующие подкаталоги, вы должны быть уверены: 1) он пуст 2) это каталог с тем же именем, что и у его родителя.
И вам нужно начинать с самого глубокого вниз (например: A/A/A/A/A/: начинать с дальнейшего вниз).
Вот способ сделать это в bash + grep + find (довольно простые, как я тестирую на старой машине):
recdeldir ()
{
_tab_="`printf '\011'`";
find . -type d -depth -print | grep -v '^\.$' | while IFS= read dir; do
echo "======= $dir =============";
pushd "${dir}";
if [ -d "../../`basename ${dir}`" ]; then
echo "Matching subdir: `pwd`";
if ( find . -print | grep -v '^\.$' | wc -c | grep "[ ${_tab_}]*0$" >/dev/null ); then
echo "empty, deleting `pwd`/";
cd ..;
rmdir "`basename ${dir}`";
else
echo "`pwd`/ is not empty. doing nothing.";
fi;
else
echo "Not matching subdir : `pwd`";
fi;
popd;
done
}
И вот пример использования этой функции: я создал /tmp/DIR
, и внутри него я создал несколько тестовых примеров (с несколькими dir с одинаковыми именами, некоторые начинаются с ".", А в некоторых из них). я добавил другие файлы, чтобы гарантировать, что они не будут удалены и приняты во внимание и т. д.
Другими словами, я удостоверяюсь, что в этом сценарии НЕ удаляется subdir, соответствующий имени dir родителя, если этот subdir не пустой, гарантируя, что мы не удаляем вещи, которые мы не должны удалять (я считаю, что это соответствует пожеланиям автора), Если мы должны удалить независимо от содержимого / пустоты, следует внести изменения, чтобы не беспокоиться о разнице «пусто / не пусто».
В вашем сеансе bash просто скопируйте / вставьте эту функцию выше, чтобы создать ее в текущей оболочке (или добавить в файл, который вы создаете, или в ваш bashrc), а затем вы можете использовать его:
Затем я перешел в /tmp/DIR
и запустил: recdeldir
bash-2.05b$ find . -ls
8192 1 drwxrwxr-x 5 user group 256 Dec 18 12:03 .
8193 1 drwxrwxr-x 3 user group 256 Dec 18 11:31 ./tre
8194 0 -rw-rw-r-- 1 user group 0 Dec 18 11:31 ./tre/sdfsd
8195 0 -rw-rw-r-- 1 user group 0 Dec 18 11:31 ./tre/sdfsdq
8196 1 drwxrwxr-x 2 user group 256 Dec 18 12:10 ./tre/tre
8199 0 -rw-rw-r-- 1 user group 0 Dec 18 11:31 ./tre/tre/i
8200 1 drwxrwxr-x 3 user group 256 Dec 18 12:11 ./.O
8203 1 drwxrwxr-x 3 user group 256 Dec 18 12:11 ./.O/.O
8204 1 drwxrwxr-x 2 user group 256 Dec 18 12:11 ./.O/.O/.O
8205 0 -rw-rw-r-- 1 user group 0 Dec 18 12:11 ./.O/.something
8201 1 drwxrwxr-x 3 user group 256 Dec 18 12:11 ./.OOO
8198 1 drwxrwxr-x 3 user group 256 Dec 18 12:11 ./.OOO/.OOO
8202 1 drwxrwxr-x 2 user group 256 Dec 18 12:11 ./.OOO/.OOO/.OOO
8197 1 -rw-rw-r-- 1 user group 967 Dec 18 12:11 ./result
bash-2.05b$ recdeldir
======= ./tre/tre =============
/tmp/DIR/tre/tre /tmp/DIR
Matching subdir: /tmp/DIR/tre/tre
/tmp/DIR/tre/tre/ is not empty. doing nothing.
/tmp/DIR
======= ./tre =============
/tmp/DIR/tre /tmp/DIR
Not matching subdir : /tmp/DIR/tre
/tmp/DIR
======= ./.O/.O/.O =============
/tmp/DIR/.O/.O/.O /tmp/DIR
Matching subdir: /tmp/DIR/.O/.O/.O
empty, deleting /tmp/DIR/.O/.O/.O/
/tmp/DIR
======= ./.O/.O =============
/tmp/DIR/.O/.O /tmp/DIR
Matching subdir: /tmp/DIR/.O/.O
empty, deleting /tmp/DIR/.O/.O/
/tmp/DIR
======= ./.O =============
/tmp/DIR/.O /tmp/DIR
Not matching subdir : /tmp/DIR/.O
/tmp/DIR
======= ./.OOO/.OOO/.OOO =============
/tmp/DIR/.OOO/.OOO/.OOO /tmp/DIR
Matching subdir: /tmp/DIR/.OOO/.OOO/.OOO
empty, deleting /tmp/DIR/.OOO/.OOO/.OOO/
/tmp/DIR
======= ./.OOO/.OOO =============
/tmp/DIR/.OOO/.OOO /tmp/DIR
Matching subdir: /tmp/DIR/.OOO/.OOO
empty, deleting /tmp/DIR/.OOO/.OOO/
/tmp/DIR
======= ./.OOO =============
/tmp/DIR/.OOO /tmp/DIR
Not matching subdir : /tmp/DIR/.OOO
/tmp/DIR
bash-2.05b$ find . -ls
8192 1 drwxrwxr-x 5 user group 256 Dec 18 12:03 .
8193 1 drwxrwxr-x 3 user group 256 Dec 18 11:31 ./tre
8194 0 -rw-rw-r-- 1 user group 0 Dec 18 11:31 ./tre/sdfsd
8195 0 -rw-rw-r-- 1 user group 0 Dec 18 11:31 ./tre/sdfsdq
8196 1 drwxrwxr-x 2 user group 256 Dec 18 12:10 ./tre/tre
8199 0 -rw-rw-r-- 1 user group 0 Dec 18 11:31 ./tre/tre/i
8200 1 drwxrwxr-x 2 user group 256 Dec 18 12:11 ./.O
8205 0 -rw-rw-r-- 1 user group 0 Dec 18 12:11 ./.O/.something
8201 1 drwxrwxr-x 2 user group 256 Dec 18 12:11 ./.OOO
8197 1 -rw-rw-r-- 1 user group 967 Dec 18 12:11 ./result
bash-2.05b$