Рекурсивный Linux удаляет хранение первого Dir

В дополнение к ответам выше, Вы также должны разделить IP-адреса. Один на имя хоста SSL.

6
задан 23 June 2009 в 19:54
8 ответов
rm -r /path/to/directory/*

или

rm -rv /path/to/directory/*

если Вы хотите видеть то, что происходит.

11
ответ дан 3 December 2019 в 00:09
  • 1
    DOH! Конечно, спасибо, it' s не часто I' m в терминале Linux. –  Marc 23 June 2009 в 20:20
  • 2
    Обратите внимание что этот won' t получают .directories, и Вы определенно не хотите делать.* (который будет соответствовать родительскому каталогу). –  chaos 23 June 2009 в 20:54
  • 3
    Да, вышеупомянутое пропустит файлы/каталоги, запускающиеся с "." в указанном каталоге. Это удалит такие файлы/директоров из подкаталогов в соответствии с тем каталогом, но те, которые в самом каталоге, должны будут быть сделаны индивидуально. Вы, скорее всего, столкнетесь с этой проблемой с корневым каталогом (который будет часто содержать довольно много "." файлы и директора), и каталоги Apache служит файлам/сценариям от (которые вряд ли не будут иметь .htaccess файла в них). –  David Spillett 23 June 2009 в 21:31
  • 4
    получить dotfiles в ударе: набор-o dotglob –  Ian Kelling 23 June 2009 в 23:08
  • 5
    Это - что-то, что я однажды знал и так как забыл. Спасибо за напоминание Ian. –  David Spillett 24 June 2009 в 00:36

Хаос - Вы являетесь неправильными в своей озабоченности, что комната будет когда-либо удалять..

Я сделал быстрый поиск и нашел страницы справочника к комнате из 7-го руководства Unix выпуска по http://plan9.bell-labs.com/7thEdMan/vol1/man1.bun, где это говорит:

ДИАГНОСТИКА

   Generally  self-explanatory.   It  is forbidden to remove the file ..
   merely to avoid the  antisocial  consequences  of  inadvertently  doing
   something like rm -r .

Учитывая, что 7-й Unix выпуска является родителем всего современного unixes и был выпущен в 1979, я скажу, что это - решительно безопасная вещь сделать. Это ничего не делает, но это не наносит ущерба вообще.

Теперь, существуют другие программы как показанный, в который это будет счастливо "убывать".. и вызовите все виды хаоса, если Вы делаете дурацкие вещи как "показанный-Rh пользователь.*" но комнату не показывают.

2
ответ дан 3 December 2019 в 00:09

Легкая версия, если текущий каталог прекрасен для работы с:

find . ! \( -name . \) -print0 | xargs -0 rm -rf

Более трудная версия, если текущий каталог бесполезен:

find /some/dir ! \( -samefile /some/dir \) -print0 | xargs -0 rm -rf
1
ответ дан 3 December 2019 в 00:09

найдите/path/dir/-тип f-print|xargs комната

0
ответ дан 3 December 2019 в 00:09
  • 1
    Если Вы собираетесь использовать find+xargs, используйте " пустой указатель как separater" опции или you' ll испытывают затруднения, если какие-либо из имен файлов содержат пробелы: " найдите/path/dir/-тип f-print0 | xargs-0 rm" –  David Spillett 23 June 2009 в 20:00
  • 2
    Это удалит только файлы внутри/path/dir –  Karolis T. 23 June 2009 в 20:01
  • 3
    Кроме того, вышеупомянутое только удалит файлы (включая файлы в подкаталогах), но оставит любые подкаталоги на месте (но пустой). –  David Spillett 23 June 2009 в 20:01

Почему не просто:

rm -rf directory

Вы получите сообщение об ошибке, так как у Вас нет разрешения удалить каталог. Но это также удалит все в каталоге, включая те неприятные скрытые файлы.

0
ответ дан 3 December 2019 в 00:09
  • 1
    Это добилось бы цели на интерактивной сессии (и избежало бы "." проблема файла/dir, упомянутая в других комментариях), но you' d должен быть тщательным использованием его в сценариях где Вы don' t хотят дополнительное сообщение об ошибке 9you, мог перенаправить stderr к/dev/null в этом случае, хотя мы становимся грязными там). –  David Spillett 23 June 2009 в 21:34

Это - одна из тех темных областей Unix, который может стать липким быстро.

Каждый из вышеупомянутых примеров щекочет давнюю ошибку в Unix, который в эти дни люди просто рассматривают как милую небольшую причуду личности.

найти. | xargs комната

не будет работать, если будут дурацкие имена файлов в каталоге как новые строки или пробел. Можно даже начать удалять другие файлы не в каталоге, если существует имя файла с a; в нем. Кто знает то, что происходит, если существует имя файла с 'в нем. Просто спросите небольшие таблицы отбрасывания bobby. Вещи могут стать захватывающими быстро.

Комментарий Bill Weiss правильно указывает, что современные версии находки и xargs, которые правильно используют, аннулируют как разделители полей для каждой вещи, которые находят, находит, используете ли Вы-print0 в находке и-0 в xargs. Не будучи доверчивым видом, и получавший первый опыт в более старых, случайным образом поврежденных версиях Unix, я склонен опасаться этих новомодных gnuisms, даже при том, что они работают вполне хорошо и в этом случае являются корректным решением этой определенной проблемы.

комната-r/path/to/directory /* не будет работать, если у Вас будет 10 000 файлов в том каталоге.

Теперь - главным образом я просто не потрудился делать это правильно, таким образом, я буду использовать комнату-rf и смотреть на ошибку, если будет ошибка. Если я на 100% уверен, что нет дурацких файлов, я мог бы использовать, находят и xargs, хотя я действительно не доверяю им.

Если я делаю его в сценарии, который работает автоматически, и я понятия не имею, сколько времени это будет используемым или кто собирается использовать его, я пытаюсь сделать это правильный путь.

Я не могу действительно думать о быстром, опрятном, и надежном способе сделать это, но я думаю, что мог сделать это со сценарием оболочки Bourne как:

for a in * .*
do
  rm -rf "$a"
done

Теперь - это безопасно, потому что для цикла защищает командную строку "комнаты" от наличия миллиарда исходных данных, и двойные кавычки вокруг переменной защищают его от дурацких вещей как символы ESC или точки с запятой или другой meta мусор. Это также намного медленнее, чем находка + xargs.

Таким образом, я предполагаю, что правильный ответ "Нет никакой программы, чтобы сделать это. Необходимо записать программу, чтобы сделать это надежно". Я предполагаю, что это - то, какого киоскера и все сделали с находкой и xargs...

0
ответ дан 3 December 2019 в 00:09
  • 1
    найти.-print0 | xargs-0 комнат –  Bill Weiss 23 June 2009 в 20:51
  • 2
    Ваш сценарий оболочки решительно не безопасен, и сдует родительский каталог текущего каталога. –  chaos 23 June 2009 в 20:56
  • 3
    В самом деле? комната-rf.* расширяется до.. и., но с которым версии комнаты позволяют Вам удалять связь..? (Я свободно признаю что я don' t имеют доступ к любому экзотическому unixes прямо сейчас для тестирования этого). –  chris 23 June 2009 в 21:01
  • 4
    А-ч, you' право ре. Забыл, что комната защищает от того случая. You' ре не в Arie Karhendana' s мир вреда, затем.:) –  chaos 23 June 2009 в 21:05
  • 5
    I' ve, замеченный все виды ужасных вещей пойти не так, как надо с.. и рекурсивные команды (показанный-Rh пользователя.* и теперь все корневые каталоги и их содержание принадлежат пользователю). комната can' t удаляют связь.. потому что каталог isn' t пустой и это hasn' t сказал для перечисления содержания.. Независимо, счет Weiss' s находят + xargs, лучше (если Вы доверительная находка и xargs и хотя я должен я don' t, потому что I' ve, замеченный это взорваться в более старых ошибочных версиях, которые являются not' t, вероятно, чтобы использоваться где угодно больше, но суеверие умирает трудно). –  chris 23 June 2009 в 21:50

Я полагаю, что можно было использовать: комната-rf / тестирует /*

0
ответ дан 3 December 2019 в 00:09

Можно попробовать

# rm -rf [dir]/* [dir]/.*

-1
ответ дан 3 December 2019 в 00:09
  • 1
    О, ад нет. ".*" соответствия ".." поэтому теперь you' ve сдувается [dir] ' s родительский каталог. –  chaos 23 June 2009 в 20:55

Теги

Похожие вопросы