Как удалить / удалить исполняемые файлы (он же файлы без расширения) только

Как удалить / удалить исполняемые файлы (он же файлы без расширения) только

13.05.2009 10:58:49 Просмотров 35 Источник

У меня есть каталог src/, который содержит много файлов .cc и его двоичный файл. Например:

src/
  |_ foo.cc
  |_ bar.cc
  |_ qux.cc
  |_ thehead.hh
  |_ foo  (executable/binary)
  |_ bar  (executable/binary)
  |_ qux  (executable/binary)
  |_ makefile

В реальности существует множество .cc и исполняемых файлов.

Мне нужно удалить эти двоичные файлы глобальным способом без необходимости перечислять все файлы. Есть ли быстрый и компактный способ сделать это?

Я пытался:

$ rm *

но она удаляет все файлы, в том числе .CC и .HH файлы.

Я отдаю себе отчет в этой команде:

$ rm foo bar qux ....

но тогда нам все равно придется перечислять все файлы один за другим.

У вопроса есть решение - Посмотреть?

Ответы - Как удалить / удалить исполняемые файлы (он же файлы без расширения) только / How to remove/delete executable files (aka files without extension) only

RichieHindle

13.05.2009 11:02:08

Вот, держи.:

ls | grep -v "\." | xargs rm

grep -vговорит: "только разрешите имена файлов, которые не содержат точки", А xargs rmговорит: "затем передайте список имен файлов в rm".

https://stackoverflow.com/questions/856463/how-to-remove-delete-executable-files-aka-files-without-extension-only/856474#comment664360_856474
@Richie: спасибо. Есть ли способ исключить "makefile"? Который мы хотим сохранить.
https://stackoverflow.com/questions/856463/how-to-remove-delete-executable-files-aka-files-without-extension-only/856474#comment664499_856474
@foolishbrat: просто добавьте еще один grep: ls / grep-v"\.| / grep-v makefile | xargs rm
https://stackoverflow.com/questions/856463/how-to-remove-delete-executable-files-aka-files-without-extension-only/856474#comment58843066_856474
как насчет исключения подкаталогов? предполагаете, что для этого вам нужно использовать findвместо ls? кроме того, вы можете исключить файлы с .и Makefileвот так: grep
https://stackoverflow.com/questions/856463/how-to-remove-delete-executable-files-aka-files-without-extension-only/856474#comment61241440_856474
полная неразбериха и заблуждение. Мне интересно, столько положительных отзывов.
Stephan202

13.05.2009 11:03:53

Используй find. Чего ты хочешь, так это этого.:

find . -type f -executable -exec rm '{}' \;

Удаление всего без расширения также может быть сделано:

find . -type f -not -iname "*.*" -exec rm '{}' \;

Первый вариант не удаляет файл Makefileи поэтому является предпочтительным. Я думаю, что ответ kcwu показывает хороший способ улучшить вышеизложенное, используя опцию-delete :

find . -type f -executable -delete
find . -type f -not -iname "*.*" -delete

Правка: я использую GNU findutils find, версия 4.4.0, под Ubuntu 8.10. Я не знал, что переключатель-executable настолько необычен.

https://stackoverflow.com/questions/856463/how-to-remove-delete-executable-files-aka-files-without-extension-only/856482#comment664367_856482
@Stephan: я получил " найти: - исполняемый файл: неизвестный вариант"
https://stackoverflow.com/questions/856463/how-to-remove-delete-executable-files-aka-files-without-extension-only/856482#comment664380_856482
Какую находку вы используете? - исполняемый файл не работает для меня. Однако я могу использовать-perm /ugo+x с GNU find.
https://stackoverflow.com/questions/856463/how-to-remove-delete-executable-files-aka-files-without-extension-only/856482#comment664381_856482
@foolishbrat: возможно, вы используете более старый вариант поиска. Попробуйте ответить на вопрос kcwu.
https://stackoverflow.com/questions/856463/how-to-remove-delete-executable-files-aka-files-without-extension-only/856482#comment664403_856482
@Matthew: я обновил ответ. Я полагаю, что большинство альтернатив исполняемому файлу являются более портативными.
https://stackoverflow.com/questions/856463/how-to-remove-delete-executable-files-aka-files-without-extension-only/856482#comment664622_856482
Интересный. Я использую Ubuntu 8.04 (только одна версия позади, хотя и LTS).
https://stackoverflow.com/questions/856463/how-to-remove-delete-executable-files-aka-files-without-extension-only/856482#comment61241629_856482
Если вы добавите переключатель типа f к первому предложению, оно будет идеальным. В противном случае, на мой Линукс CenOS подкаталоги также рассматриваются как исполняемые файлы. Однако удаление, к счастью, не удается.
Является ответом!
kcwu

13.05.2009 11:05:21

вы можете бежать

find . -perm +100 -type f -delete
https://stackoverflow.com/questions/856463/how-to-remove-delete-executable-files-aka-files-without-extension-only/856486#comment664395_856486
Просто для ясности, это только проверяет, установлен ли бит exec пользователя, и он использует устаревший синтаксис. Видеть человека найти за подробности.
anonymous

13.05.2009 11:06:55

Вместо передачи-exec rm '{}' \;для поиска можно использовать-deletearg.

Reuben Peeris

13.05.2009 11:10:29

Используйте поиск, чтобы удалить все файлы (не папки), которые не содержат точечный символ:

find . \! -name "*.*" -type f -exec rm {} \;
https://stackoverflow.com/questions/856463/how-to-remove-delete-executable-files-aka-files-without-extension-only/856499#comment61241656_856499
отсутствие . это не значит, что он является исполняемым
Matthew Flaschen

13.05.2009 11:11:23

find . -perm /ugo+x -delete

Исправлена версия первой команды Stephan202.

EDIT: также попробуйте:

find . -perm /111 -delete

который использует восьмеричный эквивалент

https://stackoverflow.com/questions/856463/how-to-remove-delete-executable-files-aka-files-without-extension-only/856501#comment664723_856501
@Matt: под MacOsX я получаю следующее: find: - perm: / ugo+x: строка незаконного режима
nonopolarity

13.05.2009 11:12:10

я предлагаю использовать сначала

find . -not -name "*.*" -exec ls -l {} \;

чтобы увидеть имена файлов, которые совпадают.

а затем измените ls-l на rm

find . -not -name "*.*" -exec rm {} \;

кроме того, вы можете использовать запрос подтверждения, чтобы сделать его более безопасным:

find . -not -name "*.*" -exec rm -i {} \;
raimue

14.05.2009 02:14:27

Я бы предпочел пойти на чистую цель в файле Makefile. Скорее всего, он уже содержит список этих двоичных файлов, поэтому добавление чистой цели не потребует больших усилий.

https://stackoverflow.com/questions/856463/how-to-remove-delete-executable-files-aka-files-without-extension-only/860694#comment668420_860694
И это безопаснее. Просто подумайте о том, что произойдет, если вы используете одно из других решений grep'ish, и кто-то решит, что было бы неплохо иметь файл "README ;-)
https://stackoverflow.com/questions/856463/how-to-remove-delete-executable-files-aka-files-without-extension-only/860694#comment31526501_860694
Как бы вы написали цель make clean, чтобы удалить все скомпилированные исполняемые файлы? Я думал, что это был смысл findи ls | grep, чтобы поставить под clean:и поймать все исполняемые файлы? Или я что-то упускаю из виду?
https://stackoverflow.com/questions/856463/how-to-remove-delete-executable-files-aka-files-without-extension-only/860694#comment31598415_860694
Make-файлы состоят из статических инструкций, описывающих карту, какие исходные файлы используются для создания конкретного целевого файла и как. Поэтому у вас обычно есть список всех возможных целевых исполняемых файлов в переменной с именем TARGETS или аналогичной.
https://stackoverflow.com/questions/856463/how-to-remove-delete-executable-files-aka-files-without-extension-only/860694#comment58843272_860694
так действительно ли лучше специально перечислять каждый исполняемый файл в чистой цели Makefile?
jackw11111

07.02.2020 04:17:20

Вы можете просто скомпилировать ваши исполняемые файлы в /binи просто rm /bin/*. Просто и легко.

Помочь в развитии проекта:
Закрыть X