Из руководства:
-ф, --форс
игнорировать несуществующие файлы, никогда не запрашивать
-r, -R, --рекурсивный
рекурсивно удалить содержимое каталогов
Хотя описание этого параметра отличается, при попытке удалить пустую папку (без rmdir в данном примере) результат будет таким же.
-f
не выводит сообщение об ошибке или что-то в этом роде по сравнению с -r
, это единственное отличие или есть определенный тип ситуаций, когда один вариант лучше другого, или ситуации, когда один из этих вариантов просто не работает, а другой работает?
решение1
Вот что говорится на странице руководства CentOS:
-f, --force
ignore nonexistent files, never prompt
-r, -R, --recursive
remove directories and their contents recursively
-r
Из того, что я понял (благодаря некоторым комментариям ниже), для флагов и справедливо следующее -f
:
-р
- рекурсивно удаляет содержимое каталога, включая скрытые файлы и подкаталоги
- В зависимости от конфигурации, он может запросить разрешение (например, при использовании флага
--interactive
). Некоторые дистрибутивы делают это по умолчанию. - может использоваться для удаления каталога, если вы хотите это сделать, просто укажите путь к каталогу (например:
/path/to/directory
)
-ф
- не удаляет рекурсивно содержимое каталога, а только удаляет файлы, которые напрямую соответствуют указанному пути (например,
example/file1
илиexample/*
). - Никогда не удаляет подкаталоги
- Никогда не запрашивает разрешения, в основном
yes to all
в Windows
Ниже приведено несколько примеров, все они начинаются со следующей структуры:
example/
file1
file2
file3
.file
dir/
file1
file2
file3
.file
Я включил детализация и интерактивный режим по умолчанию для этих примеров. Некоторые дистрибутивы делают это, а некоторые нет.
пример rm
$ rm example
rm: cannot remove `example': Is a directory
Как видите, rm
по умолчанию каталоги не удаляются.
пример rm -f
$ rm example -f
rm: cannot remove `example': Is a directory
Использование -f
флага по-прежнему не позволяет удалять каталоги.
пример rm -r
$ rm example -r
rm: descend into directory `example'? yes
rm: remove regular empty file `example/file3'? yes
removed `example/file3'
rm: remove regular empty file `example/file2'? yes
removed `example/file2'
rm: descend into directory `example/dir'? yes
rm: remove regular empty file `example/dir/.file'? yes
removed `example/dir/.file'
rm: remove regular empty file `example/dir/file3'? yes
removed `example/dir/file3'
rm: remove regular empty file `example/dir/file2'? yes
removed `example/dir/file2'
rm: remove regular empty file `example/dir/file1'? yes
removed `example/dir/file1'
rm: remove directory `example/dir'? yes
removed directory: `example/dir'
rm: remove regular empty file `example/file1'? yes
removed `example/file1'
rm: remove directory `example'? yes
removed directory: `example'
Как вы видите, у вас запрашивается разрешение для каждого отдельного файла и каталога, скрытые файлы также удаляются.
пример rm/* -f
$ rm example/* -f
rm: cannot remove `example/dir': Is a directory
removed `example/file1'
removed `example/file2'
removed `example/file3'
Здесь у вас не спрашивают разрешения, каталоги не удаляются, как и скрытые файлы.
пример rm/* -r
$ rm example/* -r
rm: descend into directory `example/dir'? yes
rm: remove regular empty file `example/dir/.file'? yes
removed `example/dir/.file'
rm: remove regular empty file `example/dir/file3'? yes
removed `example/dir/file3'
rm: remove regular empty file `example/dir/file2'? yes
removed `example/dir/file2'
rm: remove regular empty file `example/dir/file1'? yes
removed `example/dir/file1'
rm: remove directory `example/dir'? yes
removed directory: `example/dir'
rm: remove regular empty file `example/.file'? yes
removed `example/file'
rm: remove regular empty file `example/file1'? yes
removed `example/file1'
rm: remove regular empty file `example/file2'? yes
removed `example/file2'
rm: remove regular empty file `example/file3'? yes
removed `example/file3'
В данном случае удаляется содержимое каталога-примера (а не сам каталог), включая скрытые файлы.
решение2
rm -r mydir
удалит mydir
каталог со всем его содержимым.
rm -f mydir
не удалит каталог (ни пустой, ни с содержимым). Он сообщит об ошибке:
в BSD/OS X:
rm: mydir/: is a directory
в GNU/Linux:
rm: cannot remove 'mydir': Is a directory
Возможные объяснения rm
поведения команды независимо от приведенных аргументов (от наиболее к наименее вероятному):
- у вас определен псевдоним оболочки
rm
, и он передает некоторые определенные параметры (например ,-r
) командеrm
- вы вызываете скрипт,
rm
который также передает дополнительные параметры фактической команде - у вас есть пользовательский
rm
исполняемый файл
Вы можете проверить первые две возможности, выполнив /bin/rm -f mydir
.