我有一个目录,里面有很多我想备份的已编译 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 作为 shell,这对于 shell 管道来说是一个简单的任务。
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