-2

Я хочу использовать поиск и удалить все, кроме одной папки, если найден. например

[oracle@SJOAM test]$ ls -l
total 4
-rw-r--r--. 1 oracle oinstall    0 Sep  2 02:05 a
-rw-r--r--. 1 oracle oinstall    0 Sep  2 02:05 b
-rw-r--r--. 1 oracle oinstall    0 Sep  2 02:05 c
-rw-r--r--. 1 oracle oinstall    0 Sep  2 02:05 d
-rw-r--r--. 1 oracle oinstall    0 Sep  2 02:05 e
-rw-r--r--. 1 oracle oinstall    0 Sep  2 02:05 f
-rw-r--r--. 1 oracle oinstall    0 Sep  2 02:05 g
drwxr-xr-x. 2 oracle oinstall 4096 Aug  7 07:25 test2

Я хотел удалить все, кроме test2.

Итак, я начал с

[oracle@SJOAM test]$ find test2 -prune -o -print
[oracle@SJOAM test]$ 

Ничего не вернуть

q1) почему указанная выше команда без -name не показывает остальные файлы? но с "-name", показанным ниже, показывая остальные файлы?

[oracle@SJOAM test]$ find -name test2 -prune -o -print
.
./e
./a
./b
./d
./f
./g
./c

С -name я могу видеть остальные файлы. Но я все еще вижу "." текущая папка.

[oracle@SJOAM test]$ find -name test2 -prune -o -exec rm -r '{}' \;
rm: cannot remove directory: `.'
[oracle@SJOAM test]$ ls -l
total 4
drwxr-xr-x. 2 oracle oinstall 4096 Aug  7 07:25 test2

Ну, все файлы удалены. Но я вроде чувствую, что это не правильный путь - это попытка удалить "."

q2) Как я могу предотвратить удаление "." ?

Также,

[oracle@SJOAM test]$ find test2
test2
test2/a9
test2/a8
test2/a7
test2/a10
[oracle@SJOAM test]$ find -name test2
./test2
[oracle@SJOAM test]$ 

q3) Почему -name показывает ./test, но без -name не показывает "./"?

1 ответ1

0

Это отлично работает

find . ! -name test2 ! -name . -exec rm -r '{}' \;

Добавляя ! -name ... , мы скажем найти пропустить . и объекты test2 .

Отвечая на ваш первый вопрос, от man find:

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [путь ...] [выражение]

Как видите, если вы не указали первые опции перед [path...] , команда find обрабатывает первый аргумент как путь для поиска, поэтому, когда вы find test2 -prune -o -print , в нем перечислены все файлы. в папке test2 но инвертирует вывод из-за оператора OR, упорядоченного -prune -o. Этот ответ также связан с вашим третьим вопросом.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .