ОП.05Файлы, маски, поиск и справказанятие 4Материалы

Часть 3 из 7

Удаление файлов и имена с пробелами

В этой части разберём команды rm и rmdir, порядок безопасного удаления и то, как оболочка делит на части имя с пробелом.

  1. 3.1 Удаление: rm и rmdir
  2. 3.2 Имена с пробелами

3.1 Удаление: rm и rmdir

Команда rm (remove — «удалить») удаляет имя файла из каталога. Если это было последнее имя файла, система освобождает место, которое занимали его данные. Корзины у rm нет. Корзина — функция графического файлового менеджера: при удалении он переносит файл в каталог ~/.local/share/Trash. Файл, удалённый в терминале, туда не попадает, и восстановить его обычными средствами нельзя.

Без ключей rm удаляет только файлы. Для каталога есть два способа. Команда rmdir удаляет только пустой каталог и отказывается, если внутри что-то есть. Команда rm -r удаляет каталог вместе со всем содержимым: сначала файлы, затем вложенные каталоги и в конце сам каталог. Вывод rm -rv показывает этот порядок по строкам.

Ключи -i и -v работают так же, как у cp: первый спрашивает про каждый файл, второй печатает каждое удаление. Ключ -f (force — «принудительно») действует наоборот: не задаёт вопросов и не сообщает об ошибке, если файла нет. Сочетание rm -rf часто встречается в инструкциях. Оно не задаёт вопросов и не выводит предупреждений, поэтому опечатка в пути приводит к удалению другого каталога.

В терминалеУдаление файлов и каталога
  1. cd ~/files-lab/inbox
    что делает

    Что делает команда. Переходит в каталог учебного набора inbox.

    По частям:

    cd
    сменить текущий каталог
    ~/files-lab/inbox
    куда перейти (путь от домашнего каталога)
  2. rm -v data-old.csv# удалить и сообщить
    что делает

    Что делает команда. Удаляет файл data-old.csv и печатает сообщение об удалении.

    По частям:

    rm
    удалить файлы
    -v
    печатать каждое удаление
    data-old.csv
    что удалить (путь относительно текущего каталога)
  3. rm -i data.csv.bak# спросить перед удалением
    что делает

    Что делает команда. Спрашивает, удалить ли файл data.csv.bak, и удаляет его после ответа y.

    По частям:

    rm
    удалить файлы
    -i
    спрашивать перед каждым удалением
    data.csv.bak
    что удалить (путь относительно текущего каталога)
  4. y# ответ: удалить
  5. rm ../backup# каталог без -r
    что делает

    Что делает команда. Пытается удалить каталог backup без ключа -r; rm отказывается и сообщает, что это каталог.

    По частям:

    rm
    удалить файлы
    ../backup
    что удалить (путь от каталога уровнем выше)
  6. rmdir ../backup# каталог не пуст
    что делает

    Что делает команда. Пытается удалить каталог backup; rmdir удаляет только пустые каталоги и сообщает, что каталог не пуст.

    По частям:

    rmdir
    удалить пустой каталог
    ../backup
    какой каталог удалить (путь от каталога уровнем выше)
  7. rm -rv ../backup# каталог со всем содержимым
    что делает

    Что делает команда. Удаляет каталог backup со всеми файлами и вложенными каталогами и печатает каждое удаление.

    По частям:

    rm
    удалить файлы
    -r
    удалять каталоги со всем содержимым
    -v
    печатать каждое удаление
    ../backup
    что удалить (путь от каталога уровнем выше)
  8. ls ..# backup больше нет
    что делает

    Что делает команда. Показывает содержимое каталога уровнем выше, то есть ~/files-lab.

    По частям:

    ls
    вывести содержимое каталога
    ..
    что показать (каталог уровнем выше)
Результат

rm без -r и rmdir отказываются удалять непустой каталог; rm -rv удаляет файлы, затем каталоги.

Снимок 3.1Ubuntu 24.04
  1. 1-v сообщает об удалённом файле
  2. 2-i спрашивает перед удалением
  3. 3без -r rm не удаляет каталог
  4. 4rmdir удаляет только пустой каталог
  5. 5rm -r удаляет сначала файлы, в конце сам каталог
  6. 6в ~/files-lab каталога backup больше нет
rm удаляет файлы, rmdir — только пустые каталоги, rm -r — каталог с содержимым.Весь снимок ↗

rm удаляет файлы, rmdir — только пустые каталоги, rm -r — каталог с содержимым.

Что показывает снимок. rm -v и rm -i удалили файлы; rm без -r и rmdir отказались удалять непустой каталог; rm -rv удалил его, начиная с файлов.

Где это пригодится. Отказ rmdir — полезная проверка: каталог удаляется, только если он действительно пуст. rm -r применяют к каталогам сборки и временным каталогам после проверки содержимого.

Порядок действийБезопасное удаление
  1. 1
    Проверьте, в каком каталоге вы находитесь: pwd.
  2. 2
    Выведите то, что собираетесь удалить, той же записью: ls путь для файла или каталога.
  3. 3
    Удаляйте с ключом -v, а если файлов немного — с ключом -i.
  4. 4
    Проверьте результат командой ls: удалённых имён в выводе нет.

3.2 Имена с пробелами

Оболочка делит введённую строку на слова по пробелам: первое слово — имя команды, остальные — аргументы. Имя my report.txt без кавычек превращается в два аргумента: my и report.txt. Команда ls ищет два отдельных файла и не находит ни одного.

С ls такая ошибка безвредна. С rm та же запись опасна: rm my report.txt удалит файл report.txt, если он есть в каталоге, а файл my report.txt останется на месте.

Сохранить пробел внутри имени можно двумя способами. Кавычки "my report.txt" объединяют всё, что стоит между ними, в один аргумент. Обратная косая черта перед пробелом my\ report.txt отменяет особое значение этого пробела. Клавиша Tab дополняет имя файла и сама ставит нужные символы. В именах собственных файлов пробелы заменяют дефисом или подчёркиванием, тогда кавычки не нужны.

В терминалеИмя с пробелом
  1. cd ~/files-lab/inbox
    что делает

    Что делает команда. Переходит в каталог учебного набора inbox.

    По частям:

    cd
    сменить текущий каталог
    ~/files-lab/inbox
    куда перейти (путь от домашнего каталога)
  2. ls -l my report.txt# два аргумента вместо одного
    что делает

    Что делает команда. Без кавычек оболочка передаёт ls два аргумента, my и report.txt, и ls ищет два отдельных файла.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, размер, дата
    my
    первый аргумент: оболочка отрезала часть имени по пробелу
    report.txt
    второй аргумент: вторая часть имени
  3. ls -l "my report.txt"# имя в кавычках
    что делает

    Что делает команда. Выводит строку о файле my report.txt: кавычки объединяют имя с пробелом в один аргумент.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, размер, дата
    "my report.txt"
    один аргумент: кавычки объединяют имя с пробелом
  4. ls -l my\ report.txt# пробел после обратной косой черты
    что делает

    Что делает команда. Выводит строку о файле my report.txt: обратная косая черта отменяет особое значение пробела.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, размер, дата
    my\ report.txt
    один аргумент: \ перед пробелом сохраняет пробел в имени
  5. mv -v "my report.txt" my-report.txt# имя без пробела
    что делает

    Что делает команда. Переименовывает файл my report.txt в my-report.txt — имя без пробела.

    По частям:

    mv
    перенести или переименовать
    -v
    печатать каждый перенос
    "my report.txt"
    что переименовать: имя с пробелом в кавычках
    my-report.txt
    куда или под каким именем (путь относительно текущего каталога)
  6. ls -l my*
    что делает

    Что делает команда. Выводит строки о файлах, имена которых начинаются с my.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, размер, дата
    my*
    что показать (маска: * — любые символы; оболочка заменит её именами файлов)
Результат

без кавычек две ошибки cannot access; с кавычками и с \ найден один файл; после mv имя без пробела.

Снимок 3.2Ubuntu 24.04
  1. 1без кавычек ls ищет два файла: my и report.txt
  2. 2кавычки и обратная косая черта сохраняют пробел в имени
  3. 3после переименования кавычки не нужны
Без кавычек оболочка делит имя с пробелом на два аргумента.Весь снимок ↗

Без кавычек оболочка делит имя с пробелом на два аргумента.

Что показывает снимок. Без кавычек ls получил два аргумента и сообщил о двух ошибках; с кавычками и с \ найден один файл.

Где это пригодится. Файлы с пробелами приходят из Windows и из загрузок браузера. В скриптах имена всегда берут в кавычки: "$file", иначе команда обработает не тот файл.

Итоги части 3

  • rm удаляет файлы без корзины; rmdir удаляет только пустой каталог; rm -r — каталог с содержимым.
  • Перед удалением содержимое выводят командой ls с тем же путём.
  • Ключ -i спрашивает перед каждым удалением, -f отключает вопросы и сообщения об ошибках.
  • Имя с пробелом берут в кавычки или ставят перед пробелом \.

В отчётСнимок с сообщением rmdir и снимок с именем my report.txt.

Открыть в отдельной вкладке ↗