Как использовать find для удаления скрытых файлов и папок

Как мне найти и удалить все файлы, в том числе скрытые, без расширения java . Я знаю, как использовать find для удаления файлов и запуска этой команды:

find . -not -name "*.java" -type f -delete 

Это рекурсивно ищет в папках все файлы, которые не заканчиваются на * .java. Но команда пропускает файлы в скрытых папках.

Я запускаю команду, найденную здесь : ls -lahR И я обнаружил, что команда, которую я запускал, пропустила файлы. Например:

./node_modules/.bin:
total 24
drwxr-xr-x  5 whitecat  staff   170B Apr  5 12:47 .
drwxr-xr-x  4 whitecat  staff   136B Apr  5 02:25 ..
lrwxr-xr-x  1 whitecat  staff    19B Apr  5 12:47 nopt -> ../nopt/bin/nopt.js
lrwxr-xr-x  1 whitecat  staff    20B Apr  5 12:47 semver -> ../semver/bin/semver
lrwxr-xr-x  1 whitecat  staff    19B Apr  5 12:47 shjs -> ../shelljs/bin/shjs

Какие флаги мне нужны, чтобы не пропустить эти «скрытые» файлы. Я видел « Как просмотреть скрытые файлы с помощью команды Linux` find` », и это показывает только команду find / path -type f -iname« .java »-ls . Я уже использовал эту команду, и она по-прежнему пропускает скрытые файлы.

0
задан 13 April 2017 в 15:14
1 ответ

С -типом f вы ищете файлы.

Три файла, которые вы упомянули, являются символическими ссылками:

rwxr-xr-x 1 whitecat staff 19B 5 апр, 12:47 nopt -> ../nopt/bin/nopt.js

Чтобы найти ссылки, которые вам нужно найти для -типа l

Итак, чтобы удалить эти символические ссылки, вам придется изменить свою команду to (отредактировано с использованием комментария Whitecat ниже):

find . -not -name "*.java" -type f -delete -o -type l -delete 
3
ответ дан 4 December 2019 в 12:20

Теги

Похожие вопросы