Waring на Linux CMD: найти.-delete -name "* .swp" - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь удалить все файлы .swp, которые VIM создал с помощью следующей команды: find . -delete -name "*.swp".

Тогда весь мой проект удален ... Кто-нибудь может сказать мне, почему?и как восстановить проект?

если вы измените команду на эту: find . -name "*.swp" -delete она удалит только тот файл, которому соответствует

find . -delete -name "*.swp" равно rm -rf * Эта проблемапредупреждающее сообщение для программиста.

1 Ответ

0 голосов
/ 26 октября 2018

find предикаты и действия образуют логическое выражение, которое оценивается слева направо с помощью короткого замыкания.

Ваше выражение:

find . -delete -name "*.swp"

эквивалентно выражению bash:

rm "$file" && [[ $file == *.swp ]]

Это удаляет файл, и если удаление прошло успешно, оно проверяет имя.

Сравните это с:

# Like: find . -name "*.swp" -delete 
[[ $file == *.swp ]] && rm "$file"

В этом случае оно проверяетназвание.Если проверка прошла, он удаляет файл.Это то, что вы намеревались.

Это поведение очень полезно, потому что оно позволяет вам писать более продвинутый поток управления и ветвления:

find . -name '.git' -prune \
       -o \( -name '*.xz' -exec xz -d {} \; \
          -o -name '*.gz' -exec gzip -d {} \; \) \
            -printf 'Successfully extracted %f\n'

Это выражение пропустит любой каталог .git,запустите xz -d только для файлов .xz, gzip -d только для файлов .gz и, наконец, напечатайте сообщение для извлеченных файлов.

Что касается ваших файлов, они удалены.Часто невозможно вернуть их обратно.Вам придется восстановить их из резервной копии или, если вы в отчаянии, попытаться следовать руководству по удалению файлов для вашей ОС и файловой системы (но, опять же, это часто невозможно).

...