rm -rf все файлы и все скрытые файлы. & .. ошибка

rm -rf /some/path/* удаляет все не скрытые файлы в этом каталоге (и поддиректорах).

rm -rf /some/path/.* удаляет все скрытые файлы в этом каталоге (но не subdirs), а также дает следующую ошибку / предупреждение:

 rm: cannot remove directory: `/some/dir/.' rm: cannot remove directory: `/some/dir/..' 

Каким образом можно удалить все скрытые и не скрытые файлы и папки в целевом каталоге без получения предупреждения / ошибки . и .. ?

  • Предоставьте предупреждение, когда что-то будет удалено (от root)
  • sudo rm -rf --no-preserve-root / vs sudo rm -rf / *
  • Как удалить все в каталоге?
  • Непоследовательность в поведении «rm» при подключенном томе?
  • Предотвратить удаление или принуждение подкаталога к структуре каталогов
  • Команда «sudo rm \\» зависает - хотите, чтобы система не наносила ущерба системе
  • Почему не находит. -delete удалить текущий каталог?
  • Интерактивное удаление файлов из списка
  • 7 Solutions collect form web for “rm -rf все файлы и все скрытые файлы. & .. ошибка”

    Вы всегда можете отправлять сообщения об ошибках в /dev/null

     rm -rf /some/path/.* 2> /dev/null 

    Вы могли бы просто

     rm -rf /some/path/ mkdir /some/path/ 

    … тогда вам не придется беспокоиться о скрытых файлах в первую очередь.

    * соответствует всем неточечным файлам .[!.]* соответствует всем файлам точек, кроме . и файлы, чье имя начинается с .. , и ..?* соответствует всем файлам с точкой-точкой, кроме .. Вместе они соответствуют всем файлам, кроме . и .. Если любой из этих трех шаблонов ничего не соответствует, он расширяется до самого себя; rm -f не заботится о несуществующих аргументах, поэтому это не имеет значения.

     rm -rf ..?* .[!.]* * 

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

     find . -name . -o -prune -exec rm -rf -- {} + 

    Возможно, вам станет проще удалить и воссоздать каталог. Это имеет преимущество (или, в зависимости от ситуации, как недостаток), приводящее к пустой директории, даже если другая программа одновременно создает файлы в исходном каталоге.

    Либо измените параметр dotglob вашей оболочки и используйте * , либо используйте что-то вроде find .

     find somedir -mindepth 1 -delete 

    Просто понял, что это самый удобный способ в большинстве дистрибутивов Linux:

     ls -A1 | xargs rm -rf 

    где

    -A = перечислить все, кроме . и ..

    -1 = положить каждый элемент в одну строку

    Найти – твой друг.

     find ! -name '.' ! -name '..' -delete % find ! -name '.' ! -name '..' ./test ./test4 ./test4/.test6 ./test3 ./.test5 ./test2 % find ! -name '.' ! -name '..' -delete % find ! -name '.' ! -name '..' % 

    Если вы хотите использовать рекурсивно поиск чего-то другого своего текущего каталога ($ PWD), добавьте путь сразу после команды find ; например, find /path ! -name '.' ! -name '..' -delete find /path ! -name '.' ! -name '..' -delete find /path ! -name '.' ! -name '..' -delete . Если вы хотите только спуститься к n числу каталогов, используйте параметр -maxdepth n сразу после параметра /path .

    Вышеупомянутая команда была протестирована в системе Ubuntu 13.04. Скорее всего, будет работать на других современных системах Linux.

    Это должно работать так же, как @Gilles, но более компактно:

     rm -rf {,.[!.],..?}* 

    или

     rm -rf dir/to/files/{,.[!.],..?}* 

    следует также добавить, if для использования в сценариях нужно просто быть в безопасности:

     if [ -d "$DIR" ]; then rm -rf ${DIR}/{,.[!.],..?}* fi 

    Попробуйте этот код:

     Dirlist=``find /some/path/ -type d -name '.[^.]*'` for HiddenDir in $Dirlist do rm -rf $HiddenDir done 
    Linux и Unix - лучшая ОС в мире.