Видалення директорії у PHP. Команда MKDIR та RMDIR для створення та видалення каталогу Як видалити директорію з файлом лінукс

Щоб видалити файл або каталог у 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 і ви повинні навчитися безпечно видаляти файли та каталоги за допомогою командного рядка.

Команди 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 оскільки він містить файли. Каталог проектів залишається таким, яким він був, а файли в ньому незайманими.

Коли 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 , це допоможе автоматизувати рутинні службові завдання, такі як очищення небажаних файлів журналу. Якщо ви досліджуєте цей варіант використання, пам'ятаєте про силу цих команд, ретельно перевіряйте все та завжди зберігайте останню резервну копію.

В операційних системах на базі ядра Linux зазвичай зберігається багато порожніх і непустих директорій. Деякі з них займають велику кількість місця на накопичувачі, а також часто стають непотрібними. У такому разі правильним варіантом буде їхнє видалення. Способів виконання очищення існує кілька, кожен із них застосовний у певній ситуації. Давайте розглянемо всі доступні методи детальніше, а ви виберете найбільш підходящий, виходячи зі своїх потреб.

У рамках цієї статті ми поговоримо про консольні утиліти та додаткові інструменти, запуск яких здійснюється через введення команд. Однак не слід забувати, що часто в дистрибутивах реалізовані графічні оболонки. Відповідно, для видалення директорії вам лише потрібно перейти до неї через файловий менеджер, клацнути правою кнопкою миші на іконці і вибрати "Видалити". Після цього не забудьте очистити кошик. Однак не для всіх користувачів такий варіант буде застосовний, тому рекомендуємо ознайомитися з наступними посібниками.

Перед початком розгляду способів важливо відзначити, що при введенні команди найчастіше ви самостійно вказуватимете назву папки, яку потрібно видалити. Коли ви не в її розташуванні, слід вказати повний шлях. Якщо є така можливість, рекомендуємо дізнатися про батьківський каталог об'єкта і перейти в нього через консоль. Виконується ця дія буквально за кілька хвилин:


Якщо ж ви не можете визначити розташування, при видаленні вам доведеться вводити повний шлях самостійно, тому його доведеться знати.

Спосіб 1: Стандартні команди Терміналу

У командній оболонці будь-якого дистрибутива Linux є набір основних утиліт та інструментів, що дозволяють виконувати найрізноманітніші дії з системними налаштуваннями та файлами, у тому числі здійснювати видалення директорій. Таких утиліт існує кілька, і кожна буде максимально корисною у певній ситуації.

Команда rmdir

Насамперед хотілося б торкнутися rmdir. Вона призначена для очищення системи лише від порожніх директорій. Видаляє їх безповоротно, а перевага цього інструменту полягає у простоті його синтаксису та відсутності виникнення будь-яких помилок. У консолі достатньо прописати rmdir folder , де folder- Ім'я папки в поточному місці розташування. Активація інструмента здійснюється натисканням клавіші Enter.

Ніщо не заважає вказати повний шлях до каталогу, якщо ви не можете перейти в необхідне розташування або немає потреби. Тоді рядок набуває, наприклад, наступного вигляду: rmdir /home/user/folder/folder1 , де user- Ім'я користувача, folder- Батьківський каталог, а folder1- Папка для видалення. Зверніть увагу, що перед home обов'язково ставиться сліш, а в кінці шляху він повинен бути відсутнім.

Команда rm

Попередній інструмент є однією із складових утиліти rm. Спочатку вона призначена для видалення файлів, але якщо надати їй відповідного аргументу, вона зітре та папку. Такий варіант вже підходить для непустих каталогів, у консоль при цьому потрібно ввести rm-R folder (або повний шлях до каталогу). Зверніть увагу на аргумент -R— він запускає рекурсивне видалення, тобто стосується його всього вмісту папки та її самої. Враховувати регістр при введенні обов'язково, тому що -r- вже зовсім інша опція.

Якщо ви хочете вивести на екран список всіх віддалених файлів і папок під час використання rm, тоді потрібно трохи видозмінити рядок. Введіть у «Терміналі» rm -Rfv folder , а потім активуйте команду.

Після завершення видалення з'явиться інформація про всі каталоги та окремі об'єкти, які раніше розміщувалися за вказаним розташуванням.

Команда find

На нашому сайті вже є матеріал із прикладами використання find в операційних системах, розроблених на ядрі Лінукс. Звичайно, там представлені лише основні та найкорисніші відомості. Ознайомитися з ним можна, перейшовши за наступним посиланням, а зараз ми пропонуємо дізнатися, як цей інструмент працює при необхідності видалення директорій.

  1. Як відомо, findслужить для пошуку об'єктів усередині системи. Завдяки застосуванню додаткових опцій ви можете знайти каталоги з певним ім'ям та одразу ж видалити їх. Для цього введіть в консолі find . -type d -name "folder" -exec rm -rf() \;, де folder - найменування каталогу. Обов'язково при цьому писати подвійні лапки.
  2. Іноді відображається інформація про те, що файлу або каталогу немає, але це не означає, що він не був знайдений. Просто findспрацювала повторно вже після видалення каталогу із системи.
  3. find ~/ -empty -type d -delete дозволяє видалити всі порожні папки, що знаходяться в системі. Деякі з них доступні тільки суперкористувачу, тому перед findслід додати sudo.
  4. На екрані з'являться дані про всі знайдені об'єкти та успішність виконання операції.
  5. Можна також вказати лише певний каталог, в якому інструмент здійснюватиме пошук та очищення. Тоді рядок виглядатиме, наприклад, так: find /home/user/Folder/ -empty -type d -delete .

На цьому взаємодія зі стандартними консольними утилітами в Linux завершено. Як бачите, їх існує велика кількість і кожна застосовна у певних ситуаціях. Якщо у вас є бажання ознайомитися з іншими популярними командами, читайте наш окремий матеріал за посиланням далі.

Команда 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 FILENAME

5. Корисні аліаси для команд 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

Якщо вам потрібна експертна оцінка будівлі, рекомендую замовити обстеження готових будівель фахівцями науково-виробничого центру «Технопласт»

Доброго часу, дорогі читачі. Сьогодні хотілося б поговорити на тему видалення директорії у 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 = новий 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, рекурсія

Поділитися