Найближчий до мене - це
# 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 (...)