В чем разница между rm-r и rm-f?

из мануала:

  • - f, --force

    игнорировать несуществующие файлы, не подскажешь

  • - r, - R, --recursive

    удалять содержимое каталогов рекурсивно

хотя это описание параметров отличается, при попытке удалить пустую папку (без rmdir для данного примера) он дает тот же результат.

-f не будет печатать ошибку или что-нибудь по сравнению с -r, is это единственное различие или есть конкретный тип ситуаций, когда один вариант лучше другого или ситуации, когда один из этого варианта просто не будет работать, а другой будет?

2
задан techraf
01.04.2023 21:52 Количество просмотров материала 3453
Распечатать страницу

2 ответа

это то, что страница man в CentOS говорит:

-f, --force
    ignore nonexistent files, never prompt

-r, -R, --recursive
    remove directories and their contents recursively

из того, что я собираю (благодаря некоторым комментариям ниже), для-r и -f флаги:

- r

  • рекурсивно удаляет содержимое каталога, в том числе скрытые файлы и подкаталоги
  • в зависимости от вашей конфигурации, он может запросить разрешение (например, при использовании --interactive флаг). Некоторые дистрибутивы делают это неисполнение.
  • может быть использован, чтобы удалить каталог, если вы хотите сделать это, просто дайте ему путь к каталогу (например: /path/to/directory)

- f

  • не удаляет рекурсивно содержимое каталога, а только файлы, которые непосредственно соответствуют указанному пути (например example/file1 или example/*).
  • никогда не удаляет каталоги
  • никогда не спрашивает разрешения, в основном yes to all in Окна

Ниже приведено несколько примеров, все они начинаются со следующей структурой:

example/
  file1
  file2
  file3
  .file
  dir/
    file1
    file2
    file3
    .file

я включил многословие и интерактивный режим по умолчанию для этих примеров. Некоторые дистрибутивы делают это, а другие нет.

пример РМ

$ 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
отвечен cascer1 2023-04-03 05:40

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 команда ведет себя независимо от заданных аргументов (от большинства к наименьшему скорее всего):

  1. у вас есть раковина псевдоним rm defined и он передает некоторые определенные параметры (например,-r) к rm команда
  2. вы вызываете скрипт rm, который также передает дополнительные параметры в команду
  3. у вас есть обычай rm исполняемый файл

вы можете проверить первые две возможности, выполнив /bin/rm -f mydir.

0
отвечен techraf 2023-04-03 07:57

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх