Удаление пустого каталога
Удалить файл не сложно, но что делать с каталогами?
Код:
|
$ pwd
/home/hub-lex/Testing/command_mv_test
$ ls -l
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:39 img_02_old.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 08:16 img_05.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 08:16 img_06.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:33 img_08.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:33 img_09.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:33 img_10.jpg
drwxr-xr-x 2 hub-lex hub-lex 4096 Апр 15 08:21 new_IMG_DIR
$ rm new_IMG_DIR/
rm: невозможно удалить «new_IMG_DIR/»: Это каталог |
Как видно из вывода выше, попытка не удалась. Однако в Linux существует команда rmdir, специально предназначенная для удаления каталогов:
Код:
|
$ rmdir new_IMG_DIR/
rmdir: не удалось удалить «new_IMG_DIR/»: Каталог не пуст |
И опять неудача. Команда rmdir может удалить только пустой каталог. В нашем случае в каталоге
new_IMG_DIR содержатся файлы, так что не трудно будет удалить сначала их, а потом использовать команду rmdir.
Код:
|
$ ls -l new_IMG_DIR/
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:44 img_11.jpg
$ rm new_IMG_DIR/*.*
$ rmdir new_IMG_DIR/ |
Но что делать, если надо удалить каталог содержащий 10 подкаталогов. Более того, в каждом подкаталоге содержится еще по 10 подкаталогов, каждый из которых содержит по 44 файла? Работа по удалению каталогов превратится в ночной кошмар! Однако есть более простой путь.
Удаление файлов и каталогов, содержащих данные
Для решения этой задачи надо воспользоваться сочетанием опций
-R (или –recursive) и
-f (или –force). Опция -R указывает команде rm на то, что надо перейти каждый подкаталог и удалить его содержимое, а опция -f говорит, что пользователя не надо беспокоить напоминанием о том, что очередной каталог не пустой.
Код:
|
$ pwd
/home/hub-lex/Testing/command_mv_test
$ ls -l
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:39 img_02_old.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 08:16 img_05.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 08:16 img_06.jpg
drwxr-xr-x 2 hub-lex hub-lex 4096 Апр 15 18:50 new_IMG_DIR
$ ls -l new_IMG_DIR/
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:50 img_12.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:50 img_13.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:50 img_14.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:50 img_15.jpg
$ rm -Rf new_IMG_DIR/
$ ls -l
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:39 img_02_old.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 08:16 img_05.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 08:16 img_06.jpg |
На мой взгляд это удобный способ избавится от каталога и всех его подкаталогов.
Для справки!
Ккоманда rm -Rf может удалить важные файлы и разрушить систему.
Классическое предупреждение пользователям Linux: не используйте команду rm -Rf /*, если вы работайте как пользователь root. Так можно стереть всю систему. Пользователь, сделавший это, выглядит очень глупо.
В любом случае, используя символы групповых операций в команде rm -Rf, надо соблюдать осторожность. Различие между командами rm -Rf some_file* и rm -Rf some_file * чрезвычайно велико! Первая команда удаляет все файлы в текущем каталоге начинающиеся на some_file; вторая команда сначала удаляет файл some_file, а затем все остальные файлы в каталоге и его подкаталогах.
Если вместо команды rm -Rf ~/testing/* вы зададите rm -Rf ~/testing /*, у вас возникнут большие проблемы. Сначала удалится каталог ~/testing, а затем вся файловая система.
И еще одно предупреждения пользователям: никогда не задавайте команду rm -Rf .*/*, чтобы удалить файлы, начинающиеся с точки. Поскольку указанному критерию удовлетворяет каталог .., и вы удалите все данные, расположенные выше вашего рабочего каталога.
Еще раз запомните: используя команду rm -Rf, соблюдайте осторожность! Удвойте внимание, если вы работайте с полномочиями root!
Проблемы при удалении файлов
Как удалить файл, в имени которого содержится пробел? Обычный способ – вызов команды rm и указание имени файла в качестве параметра – не подходит, так как команда интерпретирует заданное имя как два отдельных параметра.
Код:
|
$ ls -l
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 19:13 img 0001.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:39 img_02_old.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:33 img_10.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:44 img_12.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 19:14 -its_me.jpg
$ rm img 0001.jpg
rm: невозможно удалить «img»: Нет такого файла или каталога
rm: невозможно удалить «0001.jpg»: Нет такого файла или каталога |
На самом деле решить эту задачу несложно. Достаточно поместить в имя файла кавычки, как показано ниже:
Код:
|
$ rm "img 0001.jpg"
$ ls -l
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:39 img_02_old.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:33 img_10.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:44 img_12.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 19:14 -its_me.jpg |
И еще одна проблема: как удалить файл, имя которого начинается с дефиса?
Код:
|
$ ls -l
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:39 img_02_old.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:33 img_10.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:44 img_12.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 19:14 -its_me.jpg
$ rm -its_me.jpg
rm: неверный ключ -- t Попробуйте `rm ./-its_me.jpg', чтобы удалить файл «-its_me.jpg». Попробуйте `rm --help' для получения более подробного описания. |
Команда rm воспринимает символ – как признак опции, но в данном случае не распознает опцию, начинающуюся буквы
i, за которой следуют символы its_me.jpg. В результате команда не знает, как поступить.
Существует два решения этой проблемы. Во-первых, вы можете предварить имя файла двумя дефисами (
–). Это означает, что следующие за ними данные должны восприниматься не как опция, а как имя файла или каталога.
Код:
|
$ ls -l
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:39 img_02_old.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:33 img_10.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:44 img_12.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 19:14 -its_me.jpg
$ rm -- -its_me.jpg
$ ls -l
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:39 img_02_old.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:33 img_10.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:44 img_12.jpg |
Во-вторых, вы можете использовать точку как часть пути к файлу и тем самым устанить тот самый пробел перед дефисом, который ввел в заблуждение команду rm.
Код:
|
$ ls -l
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:39 img_02_old.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:33 img_10.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:44 img_12.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 19:19 -its_me.jpg
$ rm ./-its_me.jpg
$ ls -l
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:39 img_02_old.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:33 img_10.jpg
-rw-r--r-- 1 hub-lex hub-lex 0 Апр 15 18:44 img_12.jpg |
На сегодня это все.