Ч тобы удалить файл или каталог в Linux из командной строки, используйте команду rm (remove).
Будьте особенно внимательны при удалении файлов или каталогов с помощью команды rm , поскольку после удаления файла его невозможно восстановить.
В этой статье мы покажем вам, как использовать команду rm для удаления файлов и каталогов в с помощью примеров и объяснений наиболее распространенных параметров rm.
Как удалить файлы
- Чтобы удалить один файл, используйте команду rm , за которой следует имя файла:
rm filename
Если файл защищен от записи, вам будет предложено подтвердить ее, как показано ниже. Чтобы удалить файл введите y и нажмите Enter . В противном случае, если файл не защищен от записи, он будет удален без запроса.
rm: remove write-protected regular empty file "filename"?
- Чтобы удалить сразу несколько файлов, используйте команду rm , за которой следуют имена файлов, разделенные пробелом.
rm filename1 filename2 filename3
Вы также можете использовать подстановочный знак (*) и регулярные выражения для соответствия нескольким файлам. Например, чтобы удалить все файлы с расширением.pdf в текущем каталоге, используйте следующую команду:
rm *.pdf
Когда вы используете rm с wildcards (*) и регулярными расширениями, рекомендуется перечислить файлы с помощью команды ls , чтобы вы могли видеть, какие файлы будут удалены перед запуском команды rm .
- Используйте опцию -i для подтверждения каждого файла перед удалением:
rm -i filename(s)
- Чтобы удалить файлы без запроса, даже если файлы защищены от записи, используйте параметр -f (force):
rm -f filename(s)
- Вы также можете комбинировать параметры rm . Например, чтобы удалить все файлы.txt в текущем каталоге без подсказки в подробном режиме, используйте следующую команду:
rm -fv *.txt
Как удалить каталоги (папки)
- Для удаления пустого каталога используйте эту опцию -d .
rm -d dirname
- Чтобы удалить непустые каталоги и все файлы внутри них, используйте параметр r (рекурсивный).
rm -r dirname
Если каталог или файл в каталоге защищены от записи, вам будет предложено подтвердить удаление.
- Чтобы удалить непустые каталоги и все файлы без запроса, используйте r (рекурсивные) и параметр -f .
rm -rf dirname
- Чтобы удалить сразу несколько каталогов, используйте команду rm , за которой следуют имена каталогов, разделенные пробелом.
rm -r dirname1 dirname2 dirname3
То же, что и в файлах, вы также можете использовать подстановочный знак (*) и регулярные выражения для соответствия нескольким каталогам.
Вывод
К настоящему моменту вы должны хорошо понимать, как использовать команду rm в Linux и вы должны научиться безопасно удалять файлы и каталоги с помощью командной строки.
Команда MKDIR используется для создания каталога или подкаталога . Команда имеет следующий синтаксис: MKDIR[диск:]путь. Как видно из синтаксиса команда, параметр «путь» является обязательным. Данный параметр определяет название создаваемого каталога.
Например, создадим на диске «C» папку «MyFolder»: mkdir MyFolder
Теперь загляните на диск «C». Если вы все сделали правильно, в корневой директории появится папка «MyFolder». В данном случае мы создали папку в текущей директории. Теперь создадим папку «MyFolder1» на диске «D»: mkdir d:\MyFolder
Теперь на диске «D» есть папка «MyFolder1»
Если необходимо создать подкаталог, то используются те же самые команды с указанием всех подкаталогов.
Например, создадим папку «мир», которая находится в папке «привет», которая в свою очередь находится на диске «C»: mkdir привет\мир
Теперь, если вы зайдете на диск «C», то увидите там папку «привет», а в этой папке – папку «мир». Таким способом можно создавать подкаталоги, уровень вложенности которых ограничен лишь объемом памяти жесткого диска.
Команда MKDIR не сработает, если вы попытаетесь создать каталог, который уже существует в выбранной директории.
Например, создадим на диске «D» еще одну папку с названием «MyFolder1»
Команда RMDIR
удаляет каталог или подкаталог.
Cинтаксис команды: RMDIR[Q][диск:]путь.
Например, удалим с диска «D», созданную ранее папку «MyFolder1»: rmdir d:\MyFolder1
Команда RMDIR не будет выполнена, если в удаляемом каталоге находятся другие каталоги или файлы.
Например, удалим папку «привет» с диска «C» (если не забыли, в этой папке содержится еще одна папка «мир»): rmdir привет
Для того чтобы удалить каталог вместе со всеми подкаталогами и файлами используются ключ /S
или /Q
При использовании ключа /S команда RMDIR удалит каталог вместе со всем содержимым. При удалении на экран будет выведено сообщение о подтверждении удаления. rmdir /S привет
На экран выводится сообщение. При нажатии на клавишу «y» папка «привет» удалится вместе со всем содержимым.
Параметр /Q отключает запрос на подтверждение удаления непустого каталога: rmdir /S /Q привет
Обратите внимание, что в данном случаем в одной команде используется сразу 2 ключа. Ключ /S позволяет удалять каталог вместе со всем содержимым, а ключ /Q отключает запрос на подтверждение удаления.
Команду MKDIR можно записать как MD. Обе команды аналогичны друг и являются сокращениями от англ. «make directory» - создать каталог.
Команду RMDIR можно записать как RD. Обе команды аналогичны друг и являются сокращениями от англ. «remove directory» - удалить каталог.
Доброго времени суток, дорогие читатели. Сегодня хотелось бы поговорить на тему удаления директории в PHP. Казалось бы, что операция не является сложной, однако некоторые нюансы имеют место быть. Давайте рассмотрим способы, как можно это сделать.
В PHP для этого предусмотрена функция rmdir() . В качестве аргумента она принимает путь до директории, которую Вы хотите удалить. Однако, директория должна быть пустая - это главное условие (если не считать того, что у пользователя, от которого работает веб-сервер, должны быть права на запись для директории). Если в директории будут размещены файлы, то мы получим ошибку при вызове функции. Соответственно, приходим к выводу, что директорию перед использованием функции rmdir() необходимо предварительно очистить.
В сети советуют написать функцию, которой в качестве аргумента будет передаваться путь к директории, которую нам необходимо удалить. В теле функции необходимо организовать листинг содержимого директории, в рамках которого осуществляется проверка - является ли файл директорией. Если файл является директорией, то по данному условию функция вызывает себя. Это необходимо для зачистки вложенных директорий, и это будет работать на всех уровнях вложенности. В ином случае, для файла применяется функция unlink()
- она предназначена для удаления файла. За рамками данной проверки на последнем шаге мы удаляем директорию.
Пример реализации:
Function recursiveRemoveDir($dir) {
$includes = glob($dir."/*");
foreach ($includes as $include) {
if(is_dir($include)) {
recursiveRemoveDir($include);
}
else {
unlink($include);
}
}
rmdir($dir);
}
//Удалим из текущей директории директорию tmp
recursiveRemoveDir("tmp");
Какие проблемы у данного кода?
В простых случаях директория со всеми вложениями удалится. Но предположим, что в нашей директории присутствует скрытый файл, который начинается с точки, например, .htaccess . Функция glob() представляет из себя glob-подстановку UNIX, в которой по умолчанию не участвуют скрытые файлы (DOTFILES). Например, если мы зайдем в nix-терминал и будем использовать bash, то мы столкнемся с той же проблемой (речь именно о скрытых файлах в рамках glob). Для решения вопроса в bash существует команда shopt -s dotglob - она разрешает glob-подстановку скрытых файлов. В PHP же это можно решить добавлением дополнительно параметра GLOB_BRACE для glob() и расширением паттерна из первого параметра функции.
$includes = glob("tmp/{,.}*", GLOB_BRACE);
И тут так же есть проблема - мы столкнемся с бесконечным циклом, так как в массив войдут значения. и.. - что является на системном уровне текущей и родительской директорией. Придем мы к бесконечному циклу (а не к удалению всех родительских директорий), потому что. в рамках сортировки по умолчанию в сформированном массиве будет первее.. - то есть каждый раз мы будет обращаться к одной и той же директории. Для решения проблемы сформируем массив из данных системных директорий и в цикле удалим их индексы из основного массива. Также существует проблема символьных ссылок. Допустим, что в удаляемой директории размещена ссылка на другую директорию, в удалении содержимого которой мы абсолютно не заинтересованы. Для решения проблемы, перед созданием рекурсии, необходимо организовать проверку на то, что сущность не является ссылкой.
В итоге, функция обретает следующий вид:
Function recursiveRemoveDir($dir) {
$includes = glob($dir."/{,.}*", GLOB_BRACE);
$systemDots = preg_grep("/\.+$/", $includes);
foreach ($systemDots as $index => $dot) {
unset($includes[$index]);
}
foreach ($includes as $include) {
if(is_dir($include) && !is_link($include)) {
recursiveRemoveDir($include);
}
else {
unlink($include);
}
}
rmdir($dir);
}
//Удалим из текущей директории директорию tmp
recursiveRemoveDir("tmp");
Код рабочий, но на самом деле можно было сделать и проще. В PHP существует класс FilesystemIterator, который уже по умолчанию имеет необходимые нам настройки. В конструктор передается путь до директории, листинг которой нам нужен. Нам достаточно просто создать объект.
Function recursiveRemoveDir($dir) {
$includes = new FilesystemIterator($dir);
foreach ($includes as $include) {
if(is_dir($include) && !is_link($include)) {
recursiveRemoveDir($include);
}
else {
unlink($include);
}
}
rmdir($dir);
}
//Удалим из текущей директории директорию tmp
recursiveRemoveDir("tmp");
В заключение хотелось бы отметить еще один быстрый способ. Корректность его использования весьма сомнительна - отправить команду на выполнение в SHELL.
System("rm -rf tmp");
Обращаю внимание на высокий расход памяти и на то, что зачастую администраторы запрещают использовать на сервере такого рода функции в целях безопасности.
Теги: php, rmdir, glob, рекурсия
Команда rmdir поможет нам удалить пустую директорию, то есть директорию без файлов и папок. Синтаксис команды очень прост:
Rmdir DIRNAME
В случае если директория не пуста вы увидите следующее сообщение об ошибке.
$ rmdir test rmdir: failed to remove `test": Directory not empty
2. Как удалить вложенные директории в Linux?
С помощью опции -p вы можете удалить директорию с вложенной в неё поддиректорией.
$ rmdir -p dir1/dir2/dir3
Команда rmdir -p dir1/dir2/dir3 это эквивалент команды
$ rmdir dir1/dir2/dir3 dir1/dir2 dir1
3. Удаление директории с содержимым
Если вам потребовалось удалить директорию с содержимым вы можете использовать команду rm :
$ rm -rf DIRNAME
Эта команда удалит директорию, включая все содержащиеся в ней файлы и поддиректории. С осторожностью пользуйтесь данной командой, так как восстановление удаленных файлов не будет легкой процедурой.
4. Интерактивное удаление
Во избежание случайного удаления нужных файлов рекомендую рассмотреть возможность использования опции -i для интерактивного удаления файлов и папок (особенно с правами root).
Рекурсивное и интерактивное удаление директории.
# rm -ir DIRNAMEИнтерактивное удаление файла.
# rm -i FILENAME5. Полезные алиасы для команд rm и rmdir
Вы можете использовать интерактивное удаление в качестве поведения команды rm по умолчанию.
Алиас для постоянного выполнения rm в интерактивном режиме
# alias rm="rm -i"При использовании команды rm на самом деле будет выполняться команда rm -i . Но необходимо обратить внимание на один ньюанс. Не используйте опцию -i в дальнейшем, так как вы не получите желаемого эффекта. Рассмотрим пример:
В следующей команде использование -i не даст вам ожидаемый эффект..
$ rm -irf DIRNAME
В этом случае, при использовании алиаса, команду выше необходимо запускать следующим образом:
$ rm -rf DIRNAME
Все указанные ниже команды эквивалентны и выполняют один и тот же функционал.
- rm -fr
- rm -rf
- rm -r -f
- rm -f -r
Если вам необходима экспертная оценка здания, рекомендую заказать обследование готовых зданий специалистами научно-производственного центра «Технопласт»
Команды rm и rmdir удаляют файлы и каталоги в Linux, macOS и других Unix-подобных операционных системах. Они похожи на команды del и deltree в Windows и DOS. Эти команды очень мощные и имеют довольно много опций.
Важно отметить, что файлы и каталоги, удаленные с помощью rm и rmdir , не перемещаются в корзину. Они сразу же удаляются с вашего компьютера. Если вы случайно удалили файлы с помощью этих команд, вы сможете восстановить их только из резервной копии.
Как удалить файлы с помощью rm
Самый простой случай — это удаление одного файла в текущем каталоге. Введите команду rm, пробел, а затем имя файла, который вы хотите удалить.
Rm file_1.txt
Если файл не находится в текущем рабочем каталоге, укажите путь к местоположению файла.
Rm ./path/to/the/file/file_1.txt
Вы можете передать более одного имени файла в rm. При этом удаляются все указанные файлы.
Rm file_2.txt file_3.txt
Подстановочные знаки могут использоваться для выбора групп файлов, которые будут удалены. Знак * представляет несколько символов, а символ ? представляет один символ. Эта команда удалит все файлы изображений png в текущем рабочем каталоге.
Rm * .png
Эта команда удалит все файлы с одним символьным расширением. Например, это удалит File.1 и File.2, но не File.12.
Рм *.?
Если файл защищен от записи, вам будет предложено удалить файл. Вы должны ответить с помощью y или n и нажать «Enter».
Чтобы снизить риск использования rm с подстановочными знаками, используйте параметр -i (интерактивный). Для этого необходимо подтвердить удаление каждого файла.
Rm -i * .dat
Опция -f (сила) противоположна интерактивной. Он не запрашивает подтверждение, даже если файлы защищены от записи.
Rm -f имя_файла
Как удалить каталоги с помощью rm
Чтобы удалить пустой каталог, используйте опцию -d (directory). Вы можете использовать подстановочные знаки (* и?) В именах каталогов так же, как и в именах файлов.
Rm -d directory
Предоставление более одного имени каталога удаляет все указанные пустые каталоги.
Rm -d directory1 directory2 /path/to/directory3
Чтобы удалить не пустые каталоги, используйте параметр -r (рекурсивный). Чтобы было ясно, это удаляет каталоги и все файлы и подкаталоги, содержащиеся в них.
Rm -r directory1 directory2 directory3
Если каталог или файл защищен от записи, вам будет предложено подтвердить удаление. Чтобы удалить не пустые каталоги и подавить эти приглашения, используйте вместе параметры -r (рекурсивный) и -f (принудительный).
Rm -rf directory
Здесь требуется осторожность. Ошибка в команде rm -rf может привести к потере данных или неисправности системы. Это опасно, и осторожность — лучшая политика. Чтобы получить представление о структуре каталогов и файлах, которые будут удалены командой rm -rf, используйте команду tree .
Используйте apt-get для установки этого пакета в вашу систему, если вы используете Ubuntu или другой дистрибутив на основе Debian. В других дистрибутивах Linux используйте инструмент управления пакетами вашего дистрибутива Linux.
Sudo apt-get install tree
Выполнение команды tree дает простую для понимания диаграмму структуры каталогов и файлов под каталогом, из которого она запускается.
Вы также можете указать путь к команде tree чтобы он запускал дерево из другого каталога в файловой системе.
Tree path/to/directory
Команда rm также имеет параметры --one-file-system , --no-preserve-root , --preserve-root , но они рекомендуются только для опытных пользователей. Если вы что-то не так, вы можете случайно удалить все ваши системные файлы.
Как удалить каталоги с помощью rmdir
Есть еще одна команда rmdir , которую вы можете использовать для удаления каталогов. Разница между rm и rmdir том, что rmdir может удалять только пустые каталоги. Он никогда не удалит файлы.
Самый простой случай — удаление одного пустого каталога. Как и в случае с rm , вы можете передать несколько имен каталогов в rmdir или rmdir путь к каталогу.
Удалите один каталог в текущем каталоге, передав его имя в rmdir:
Rmdir directory
Удалите несколько каталогов, передав список имен в rmdir:
Rmdir directory1 directory2 directory3
Удалите каталог не в текущем каталоге, указав полный путь к этому каталогу:
Rmdir /path/to/directory
Если вы попытаетесь удалить не пустую папку, rmdir выдаст вам сообщение об ошибке. В следующем примере rmdir успешно и без вывода сообщений удаляет каталог clients но отказывается удалять каталог projects поскольку он содержит файлы. Каталог projects остается точно таким, каким он был, а файлы в нем нетронутыми.
Когда rmdir выдает ошибку «Directory not empty», он прекращает обработку каталогов, переданных ему в командной строке. Если вы попросили удалить четыре каталога, а в первом содержались файлы, rmdir выдаст вам сообщение об ошибке и больше ничего не сделает. Вы можете заставить его игнорировать эти ошибки с --ignore-fail-on-non-empty чтобы обрабатывать другие каталоги.
В следующем примере две папки были переданы в rmdir , это work/reports и work/quotes. Параметр --ignore-fail-on-non-empty включен в команду. В папке work/reports находятся файлы, поэтому rmdir не может удалить ее. Опция --ignore-fail-on-non-empty заставляет rmdir игнорировать ошибку и переходить к следующей папке, которую он должен обработать, это work/quotes. Это пустая папка, и rmdir удаляет ее.
Эта команда использовалась.
Rmdir --ignore-fail-on-non-empty work/reports /work/quotes
Вы можете использовать опцию -p (parent), чтобы удалить каталог, а также удалить его родительские каталоги. Этот прием работает, потому что rmdir начинается с целевого каталога, а затем возвращается к родительскому. Теперь этот каталог должен быть пустым, поэтому он может быть удален rmdir, и процесс повторяет шаг назад по пути, предоставленному rmdir.
В следующем примере команда, переданная в rmdir:
Rmdir -p work/invoices
Каталоги invoices и work удаляются по запросу.
Используете ли вы Bash или любую другую оболочку? Linux предоставляет гибкие и мощные команды для удаления каталогов и файлов прямо из командной строки терминала. Некоторые люди предпочитают иметь рабочий процесс, который вращается вокруг терминала. У других может не быть выбора в этом вопросе. Они могут работать на серверах без установленного графического интерфейса или в удаленном сеансе в автономной системе, такой как Raspberry Pi. Эти команды идеально подходят для этой группы людей.
Но какой бы тип рабочего процесса вы ни предпочли, эти команды очень хорошо подходят для включения в сценарии оболочки. Если сценарий запускается заданием cron , это может помочь автоматизировать рутинные служебные задачи, такие как очистка нежелательных файлов журнала. Если вы исследуете этот вариант использования, помните о силе этих команд, тщательно проверяйте все и всегда сохраняйте последнюю резервную копию.