我有像
这样的文件#md0.xvg#
#md0.xvg#
#md0.05.xvg#
#md0.05.edr#
#md0.1.edr#
#md0.1.xvg#
: :
: :
#md1.xvg#
#md.edr#
我想在没有#。
的情况下重命名它们md1.xvg
md1.agr
我想用C或shell编写一个程序但是,我不知道如何开始。如果有人可以提供帮助,我将不胜感激。
答案 0 :(得分:2)
您可以使用以下bash脚本或命令
$ rename 's/\#//g' * -v
重命名:命令
's / \#// g':替换表达式
* :所有文件
-v :详细
表达式详细信息:
s / /# / / g
^ ^^ ^^^^^^ ^
Replace # character with nothing all
如果要进行空运行(不是实际重命名),请使用以下命令:
$ rename 's/\#//g' * -vn
它只会告诉现有的和新的(重命名的)文件名,并且赢了;不进行实际的重命名。
答案 1 :(得分:0)
使用tr
(例如zsh)
% tr -d '#' <<EOF heredoc> #md0.xvg# heredoc> #md0.xvg# heredoc> #md0.05.xvg# heredoc> #md0.05.edr# heredoc> #md0.1.edr# heredoc> #md0.1.xvg# heredoc> : : heredoc> : : heredoc> #md1.xvg# heredoc> #md.edr# heredoc> EOF
结果将是
md0.xvg md0.xvg md0.05.xvg md0.05.edr md0.1.edr md0.1.xvg : : : : md1.xvg md.edr
没有 heredoc 的其他一些选项,假设包含您的数据的文件被称为yourfile.txt
% tr -d '#' < yourfile.txt
% cat yourfile.txt | tr -d '#'
使用>
重定向将输出发送到另一个文件
% tr -d '#' < yourfile.txt > newfile.txt
答案 2 :(得分:0)
可以有很多方法。在C
中,最简单的方法之一是使用数组索引来删除#
。样本算法
#......#
#
的文件名。算法:
source_buffer
。strlen()
,存储到len
(或其他)。dest_buffer
),它将保存修改后的文件名。memcpy(dest_buffer, &source_buffer[1], len-2);
dest_buffer
。或者,对于更复杂和更复杂的命名模式,您可以查看string.h
标题中原型的字符串操作函数,如strchr()
/strrchr()
答案 3 :(得分:0)
使用bash
重命名
for i in ${files[@]}; do
new_name=$(tr -d '#' $i)
mv $i $new_name
done
或者,此C代码将从作为命令行参数提供的文件名中删除第一个和最后一个char
#include <stdio.h>
#include <string.h>
int main(int argc, char ** argv) {
char * oldname = argv[1];
char * newname = strdup(argv[1]);
newname++;
newname[strlen(newname) - 1] = 0;
if (rename(oldname, newname))
printf("Error: unable to rename the file");
else
printf("File renamed successfully");
return 0;
}
答案 4 :(得分:0)
使用bash,您可以使用:
for i in ${files[@]}; do
mv $i ${i//#/}
done
用c,您可以使用strtok()函数删除'#'然后删除mv。
strcpy(temp, path);
token = strtok(path, "#");
system("mv temp token");