Найближчий до мене - це
# rm /path/to/directory/*.*
але це не працює для файлів, які не мають розширення ...
Найближчий до мене - це
# rm /path/to/directory/*.*
але це не працює для файлів, які не мають розширення ...
Відповіді:
Linux не використовує розширення. Законодавцем файлу вирішувати, чи хоче він, щоб ім'я має розширення. Linux дивиться на 1-й байт, щоб зрозуміти, з яким файлом він має справу.
Щоб видалити все в каталозі, використовуйте:
rm /path/to/directory/*
Можна скористатися -rопцією, наприклад:
rm -r /path/to/directory/*
також видалити будь-які підкаталоги (разом із усім їх вмістом) всередині каталогу, з якого ви видаляєте вміст. Інакше він покаже помилку, повідомляючи, що він не видаляє каталог.
all files;) *.*означає всі файли, що містять .десь ім’я
*a*означає нуль або більше символів, за якими aслідує нуль або більше символів. Це буде відповідати імена файлів happy, apple, aабо la.
Щоб видалити папку з усім її вмістом ( включаючи всі внутрішні папки ):
rm -rf /path/to/directory
Щоб видалити весь вміст папки ( включаючи всі внутрішні папки ), але не саму папку:
rm -rf /path/to/directory/*
або
rm -rf /path/to/directory/{*,.*}
якщо ви хочете переконатися, що приховані файли / каталоги також видаляються.
Щоб видалити всі "файли" з папки ( не видаляючи внутрішні папки ):
rm -f /path/to/directory/{*,.*}
Попередження : якщо у вас є пробіли, обов'язково використовуйте лапки.
rm -rf /path/to the/directory/*
еквівалентно 2 окремим rm -rfдзвінкам:
rm -rf /path/to
rm -rf the/directory/*
Щоб уникнути цієї проблеми, ви можете використовувати 'одноцитати '( не розширює змінні оболонки) або "подвійні лапки "( розширює змінні оболонки):
rm -rf "/path/to the/directory/"*
Де:
rm- означає " видалити "-f- означає " сила ", яка корисна, коли ви не хочете, щоб вас запитували / запитували, якщо ви хочете видалити архів, наприклад.-r- означає " рекурсивний ", що означає, що ви хочете рекурсивно переходити до кожної папки та видаляти все.rm -rf /path/to/directory/*не видаляє прихований файл у папці, наприклад .htaccess. Можливо rm -rf /path/to/directory/.? Не пробував.
rm -rf /path/to/directory/.*видаляє лише приховані файли (файли) у вказаному каталозі. Переглядаючи коментар @ danjjl на відповідь @ Rinzwind, щоб також видалити приховані файли, запустіть shopt -s dotglobперед запуском rm -rf /path/to/directory/*.
rm -rf /path/to/directory/.*у моїй системі викликано видалення елементів у /path/to. На щастя, я просто створив резервну копію всіх своїх даних на окремому диску. Потрібно сказати, що НЕ видайте команду, rm -rf /path/to/directory/.*якщо ви не створили резервну копію всього комп’ютера в окремому / безпечному місці!
Щоб видалити всі файли в каталозі (включаючи приховані файли та підкаталоги), запустіть:
rm -rf /path/to/directory/{*,.*}
./і ../, але він все одно буде видалити приховані файли.
rm -r $(pwd)/{*,.*}
Якщо ви хочете видалити лише файли в / шлях / до / каталогу, ви можете це зробити
find /path/to/directory -type f -print0| xargs -0 rm
або
find /path/to/directory -type f -exec rm '{}' \;
Ви можете виконувати навантаження за допомогою find, перевага полягає в тому, що ви можете перелічити те, що знайдено, не перекладаючи його, щоб rmви могли побачити, що буде видалено перед початком роботи.
GNU findяк -deleteприсудок. Якщо ви все ще хочете користуватися -exec, заміни \;на +збиратимуть rmдзвінки разом, підвищуючи ефективність.
Щоб видалити всі файли та каталоги (включаючи приховані ) в каталозі, ви можете спробувати наступне:
видаліть папку, а потім відтворіть її
rm -rf dir_name && mkdir dir_name
використання find
find dir_name -mindepth 1 -delete
Тут ми вказуємо -mindepth 1виключити саму директорію dir_name.
Подивіться за наступним посиланням:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory
Якщо ви також хочете видалити всі підкаталоги та сам каталог, можете скористатися rm -rf /path/to/directory. Але завжди двічі перевіряйте лінію перед натисканням клавіші return, також rm -rfможе виникнути велика кількість загроз, наприклад, якщо ви випадково вставили пробіл після першого косого кута, маючи права доступу суперпользователя ...
Оскільки це питання постійно перебуває на вершині Google, коли я сам це шукаю:
Інші відповіді страждають від різних проблем:
Деякі з них включають, .і ..це шумно, заплутано і дратує.
Деякі з них забувають приховані файли (файли, що починаються з крапки).
Вони не видаляють у правильному (найглибшому першому) порядку, щоб дозволити видалення каталогу.
Вони спускаються в інші (змонтовані) файлові системи, що часто небажано.
Їх важко правильно розширити за допомогою додаткових параметрів (докладніше про це нижче).
find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --
Зауважте, що я додав -xdevаргумент, щоб запобігти спуску в кріплення (наприклад, /procтощо).
-depthчи -delete?Незважаючи на те, що люди постійно намагаються до цього звертатися, ці методи мають і зворотний бік: це не здається, що вони досить розширюються, щоб дозволити -pruneвикористовувати підкаталог (не вносячи більше проблем). На відміну від цього методу, ви можете вставити
-not \( -path "${DIR}/subdir" -prune \)
перед -mindepthаргументом для виключення subdirвидалення його вмісту.
-depthпрапор find.
-deleteзfind ? -deleteє глибиною першою. Ви вже припускаєте, що не POSIX findз -printf, тому ви можете так само добре використовувати -deleteабо-depth -print0 | xargs -0 rm
-not \( -path "$DIR/subdir" \)... але мій? Чому?
Ви можете cdзайти в каталог, а потім виконати команду так rm *.*само, як і в DOS, якщо ви пам'ятаєте.
shopt -s dotglobдо запускуrm (...)