Удалите все файлы именем файла (острота Linux)

Я не мог заставить ответ от @timmmmmy работать, но он указал на меня на документация карты , и это работало на меня:

map $request_method $upstream_location {
   PUT     example.com:8081;
   POST    example.com:8081;
   PATCH   example.com:8081;
   default example.com:8082;
}
server {
   location / {
      proxy_pass https://$upstream_location;
   }
}

2
задан 10 June 2009 в 15:24
4 ответа

Самый простой:

найти. - пустое имя - тип f - исполнительная комната-f {} \;

"." запускается в текущем каталоге, замене путем к каталогу, если Вы хотите выполнить его в другом месте.

"-тип f" просто удостоверяется, что это - файл.

14
ответ дан 3 December 2019 в 08:31
  • 1
    " найти. - пустое имя - тип f - исполнительная комната-f {} + " будет звонить находят только так же часто по мере необходимости а не для каждого файла –  serverhorror 10 June 2009 в 15:32
  • 2
    Мог бы хотеть бросить на флаг-v к комнате, именно так пользователь знает what' s продолжение, но да, большой ответ –  Matt Simmons 10 June 2009 в 15:32
  • 3
    Я знаю, что Вы означали говорить " назовет rm" вместо находки. –  Dan Carley 10 June 2009 в 15:42
  • 4
    " найти. - пустое имя - тип f | xargs комната-f" назовет комнату только однажды –  tomdeb 10 June 2009 в 15:59
  • 5
    tomdeb> Don' t бросок закрыл кавычки имена файлов в комнате! –  Dan Carley 10 June 2009 в 16:07

Краткое изложение:

Существует несколько опций:

find . -name empty -type f -exec rm -f {} \;

будет звонить rm однажды для каждого файла

find . -name empty -type f -exec rm -f {} +

будет звонить rm только так же часто по мере необходимости путем построения командной строки, которая использует максимальную возможную длину

find . -name empty -type f | xargs rm -f

то же как выше, Вы можете (или скорее будет, как выше - который был моим подходом), сталкивается с проблемами с именами файлов, которые содержат символы то заключение в кавычки потребности

find -name empty -type f -print0 | xargs -0 rm -f

вероятно, лучшее решение комментарий C Upvote Dan, это - его решение. Это будет как более ранний вызов отрывка rm только так же часто как потребность путем построения командной строки, которая использует максимальную возможную длину, -0 переключитесь означает это аргументы rm команда будет разделена \0 так, чтобы выход был сделан правильно в оболочке.

На стороне отмечают о комментарии для ограничения при помощи -type f можно также ограничить с -size 0 (точно 0 байтов) я не могу проверить, придерживается ли CakePHP действительно той конвенции, но примерно каждого проекта, я знаю, что файлы заполнителя использования для проверки пустых каталогов в исходных репозиториях делают это.

Также, поскольку Matt Simons указывает на добавление a -v флаг мог бы быть хорошей опцией видеть некоторый прогресс, однако заметьте, что это определенно замедлит целый процесс. Лучший подход мог бы быть должен следовать за процессом при помощи strace -p $pid_of_xargs (добавьте addtional опции, если Вы хотите следовать за дочерними процессами, afaik, который возможен),

Другое примечание я просто нашел в странице справочника:

find -name empty -type f -delete

после того, как все найдут, имеет все это встроенное :)

3
ответ дан 3 December 2019 в 08:31
  • 1
    " найдите - имя пустой - тип f-delete" Просто проверьте страницу справочника сначала как более старые версии ' find' didn' t имеют - удаляют опцию. Но, пока Ваша ОС является текущей, у Вас должна быть эта опция. –  skraggy 10 June 2009 в 16:46
  • 2
    начиная с OP, который попросили Linux, я думаю, что это допустимо (исправьте меня, но меня don' t знают любое распределение это doesn' t идут с набором инструмента GNU), –  serverhorror 10 June 2009 в 19:03
  • 3
    Более старые версии Linux имели находку это didn' t включают "-delete" было все, что я говорил. Более старые версии, которые печально все еще регулярно используются в слишком многих местах.;) –  skraggy 11 June 2009 в 16:07

Возможная причина, почему cakePHP мог бы сделать это, - то, потому что некоторые системы управления версиями (например, Подвижный и Мерзавец) не могут отследить пустые каталоги.

2
ответ дан 3 December 2019 в 08:31
  • 1
    Также некоторые программы zip пропускают пустые каталоги –  amarillion 10 June 2009 в 16:20

Это могло бы сделать:

rm -f $(find /var/www -name empty -print)

Найдите рекурсивно вызывает по умолчанию.

-2
ответ дан 3 December 2019 в 08:31
  • 1
    Не будет работать правильно если there' s (тьфу) располагает с интервалами, апострофы, точки с запятой или другие странные символы в именах каталогов. –  sunny256 10 June 2009 в 15:35
  • 2
    Не идеальный. Вы могли бы произвести больше аргументов, чем Ваша оболочка/комната способна к обработке. Но что еще более важно, список аргументов won' t правильно сбежаться nasties, такой как пробелы. Если по некоторым причинам Вы don' t используют find' s - должностное лицо безопасная альтернатива была бы -name empty -type f -print0 | xargs -0 rm -f –  Dan Carley 10 June 2009 в 15:36

Теги

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