У меня есть каталог со многими скомпилированными программами на языке 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