Очевидное решение дает код выхода 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
хватит.
лучший способ, вероятно, это:
изменение rm к ls -l если вы просто хотите увидеть, что будет удалено, для подробного вывода вы можете добавить -v возможность rm
пс. не забывайте об окончании '\;'
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.