Резервное копирование каталога программирования

Резервное копирование каталога программирования

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

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

решение1

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

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

решение2

Я не совсем понял ваш первый вопрос. Если вы хотите переименовать, 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.также, то измените +на *.

решение3

Если вы используете 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

Связанный контент