Назад | Перейти на главную страницу

Как удалить все скрытые файлы и каталоги с помощью Bash?

Очевидное решение дает код выхода 1:

bash$ rm -rf .*
rm: cannot remove directory `.'
rm: cannot remove directory `..'
bash$ echo $?
1

Одно из возможных решений - пропустить "." и "..", но удаляются только файлы, имена которых длиннее 3 символов:

bash$ rm -f .??*
rm -rf .[^.] .??*

Должны поймать все дела. . ?? * будет соответствовать только 3-х символьным именам файлов (как объяснено в предыдущем ответе),. [^.] Будет перехватывать любые двухсимвольные записи (кроме ..).

find -path './.*' -delete

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

Если вы действительно хотели стереть все из каталога, find -delete хватит.

лучший способ, вероятно, это:

  • найти . -iname. * -maxdepth 1 -type f -exec rm {} \;

изменение rm к ls -l если вы просто хотите увидеть, что будет удалено, для подробного вывода вы можете добавить -v возможность rm

  • -тип f варианты говорит найти команда для поиска только файлов (без каталогов, ссылок и т. д.)
  • -maxdepth 1 говорит найти не спускаться в подкаталоги

пс. не забывайте об окончании '\;'

ls -la | awk '$NF ~ /^\.[^.]+/  {print $NF}' | xargs rm -rf

ls -la ............. long list (all files and folders)
$NF ................ last field (file or folder name)
~   ................ Regular Expression match
/^\.[^.]+/ ......... dot followed by not dot at least once +

If the last field $NF match pattern show it and send 
it to xargs which will perform the task.