1

У меня есть каталог со многими скомпилированными C-программами, которые я хотел бы сохранить. Прямо сейчас они называются program.out но я хотел бы изменить это на просто program .

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

3 ответа3

1

Я не очень ясно по вашему первому вопросу. Если вы хотите переименовать program.out в program просто запустите:

mv program{.out,}

Что касается второго вопроса, предполагая, что я хочу получить список файлов в /etc с суффиксом:

#!/bin/bash
ls /etc > /tmp/etcfiles
while read line
do
   if [[ $line =~ \..+ ]]; then
      echo $line
   fi
done < /tmp/etcfiles

Вы можете настроить выше, как требуется.

  • \. соответствует буквальному периоду.
  • . соответствует любому символу после периода.
  • + говорит, что хотя бы один символ должен следовать за начальным периодом. Так что это будет соответствовать test.c , но не test. Если вы хотите соответствовать test. а затем измените + на * .
0

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

ls | grep '\.out$' | while read file; do echo mv "$file" "${file%.*}"; done

ls создает список файлов в каталоге.

grep '\.out$' извлекает имена файлов, оканчивающиеся на .out, и отбрасывает остальные.

while read file читает имена файлов по одному.

echo mv "$file" "${file%.*}" отображает, но не запускает команду mv, которая переименовывает каждый файл в версию без его расширения. Бизнес ${file%.*} - это синтаксис bash для удаления расширения файла. Когда вы убедитесь, что конвейер будет делать то, что вам нужно, если он будет работать по-настоящему, удалите часть echo и дайте ему по-настоящему работать.

ls | grep '\.out$' | while read file; do mv "$file" "${file%.*}"; done
0

Для резервного копирования кода используйте git или другое программное обеспечение для контроля версий. В Интернете у вас есть много вариантов, чтобы назвать некоторые: GitHub, Bitbucket.

В git вы получили файл .gitignore, если вы добавите туда * .out, то он не будет передан в хранилище

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .