Нахождение всего .cpp и.h файлов и перемещение их к ~ / спам

Выполните следующую команду как корень:

update-grub

Править: Это - Ubuntu определенная команда. Чтобы сделать это на другом распределении, просто работайте grub-mkconfig -o /boot/grub/grub.cfg

2-е РЕДАКТИРОВАНИЕ: os-prober требуется, чтобы это работал (автоматически обнаруживают операционные системы и добавляют записи меню для них).

0
08.02.2014, 13:16
2 ответа

портативно:

cd &&
  find . -path ./junk -prune -o -type f \( \
    -name '*.h' -o -name '*.cpp' \) -exec sh -c '
      exec mv -i "$@" junk' sh {} +

Выше исключения junk сама папка от поиска.

Мы только удаляем регулярные файлы (-type f). Могут быть другие типы файлов, которые Вы хотите переместить как символьные ссылки, но остерегаться тот движущиеся символьные ссылки часто повреждают их.

-i гарантия состоит в том, чтобы избежать двух файлов с тем же именем, переопределяющим друг друга.

2
28.01.2020, 02:20
  • 1
    однажды проверяет мой обновленный ответ, я думаю, что имею, неправильно объясняют, что regex часть –  Rahul Patil 08.02.2014, 13:57
  • 2
    Могли Вы объяснять дополнительные вызовы sh? В противоположность, например, find . ! -path './junk/*' -type f \( -name '*.h' -o '*.cpp' \) -exec mv -i "{}" ./junk/ \; –  grebneke 08.02.2014, 14:12
  • 3
    @grebneke, mv -i {} junk \; выполнил бы тот mv на файл. Используя + передача средств максимально может файлы. Вам нужно sh смочь иметь a junk аргумент после того списка. С GNU или FreeBSD mv, Вы, возможно, сделали -exec mv -it junk {} + вместо этого. –  Stéphane Chazelas 08.02.2014, 14:43
  • 4
    @StephaneChazelas - Я вижу, но существует два sh, что делает второй sh {} +? –  grebneke 08.02.2014, 15:13
  • 5
    @grebneke, первый аргумент после sh -c code для $0 (используемый для сообщений об ошибках...), "$@" запускается после. –  Stéphane Chazelas 08.02.2014, 16:44

Если в системе GNU, можно использовать -regex опция к find как показано ниже:

find . -regex ".*\.\(h\|cpp\)" -exec echo mv -v "{}" ~/junk \;

вывод покажет, какая команда была бы выполнена, как пробный прогон. Если это выглядит хорошим, можно удалить echo для применения.

Команда терпит неудачу

  • -regex : Имя файла соответствует образцу регулярного выражения, значение по умолчанию regex тип, это - использование emacs
  • ".*\.\(h\|cpp\)" : Так как это - значение по умолчанию использования regex тип emacs, согласно соответствию шаблона . (точечное) средство соответствует любому символу так для соответствия точный . (точка), мы должны использовать символ ESC, который является \. средства для специального символа как (, | мы должны использовать символ ESC. шаблон то же как .*.(h|cpp) (regextype posix-egrep)
  • -exec : Команда Execute
  • { } : Строка {} замененный именем файла соответствий
  • \; : Потребности быть там, поскольку это говорит конец arguements, предоставленного - исполнительная переменная

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

2
28.01.2020, 02:20
  • 1
    может Вы ломаться что ".*\. (h \| cpp)", означает? Я - новичок, таким образом, я полностью потерян. –  Jonathan Chiou 08.02.2014, 13:33
  • 2
    @JonathanChiou Видит обновленный ответ.. –  Rahul Patil 08.02.2014, 13:50

Теги

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