Удалить все каталоги, кроме определенного - PullRequest
0 голосов
/ 05 декабря 2018

На хосте linux, учитывая абсолютный путь, я хочу удалить все, кроме определенного каталога.Для упрощения ниже приведена структура каталогов, и я хочу удалить все каталоги, кроме test2

[root@hostname test]# pwd
/opt/data/test
root@hostname test]# ls -ltr
total 8
drwxr-xr-x 5 root root 4096 Dec  5 09:33 test1
drwxr-xr-x 2 root root 4096 Dec  5 09:44 test2
[root@hostname test]# 

Я изучил Как исключить каталог в find.команда и попробовал переключение prune следующим образом

[root@hostname test]# find /opt/data/test -type d -path test2 -prune 
-o ! -name "test2" -print
/opt/data/test
/opt/data/test/test1
/opt/data/test/test1/ls.txt
/opt/data/test/test1/test13
/opt/data/test/test1/test13/temp.py
/opt/data/test/test1/test13/try.pl
/opt/data/test/test1/test11
/opt/data/test/test1/test11/ls.txt
/opt/data/test/test1/test11/temp.py
/opt/data/test/test1/test11/try.pl
/opt/data/test/test1/test12
/opt/data/test/test1/test12/ls.txt
/opt/data/test/test1/test12/temp.py
/opt/data/test/test1/test12/try.pl
/opt/data/test/test1/temp.py
/opt/data/test/test1/try.pl
/opt/data/test/test2/ls.txt
/opt/data/test/test2/temp.py
/opt/data/test/test2/try.pl
[root@hostname test]

, теперь он перечисляет все папки, включая / opt / data / test, и если я добавлю к этому xargs rm -rf, он удалит родительскийпапка тоже.Не думаю, что я правильно понял концепцию -path и -name, пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Использование простого отрицания с -not может быть проще, чем сокращение:

$ find /opt/data/test -type d -not -name test2

РЕДАКТИРОВАТЬ:

Нет причин возвращаться в подкаталоги, так как вы все равно собираетесь удалять верхние каталоги, так что вы можете добавить -maxdepth и избежать поиска каталогов внутри test2:

$ find /opt/data/test -maxdepth 1 -type d -not -name test2
0 голосов
/ 05 декабря 2018

Мне удалось добиться необходимого поведения, добавив -mindepth 1 к команде find, чтобы исключить родительский каталог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...