linux 没有扩展名的文件怎么添加扩展名
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 没有扩展名的文件怎么添加扩展名相关的知识,希望对你有一定的参考价值。
比如 a目录下很多jpg 图片文件 但都没有扩展名 这个时候怎么批量的给这些没有扩展名的文件加上 扩展名 .jpg 呢?
1.rename命令批量修改文件名, 其实linux下可以使用别的办法来批量修改文件名, 不过rename实在太方便了比如把所有的表为cdb1_* 修改为cdb_*的
在本目录下
只需要# rename 'cdb1' 'cdb' *
以前都是写个for循环来做...想想多傻啊, 呵呵
rename还有更多的功能, 建议man rename下
From:http://www.hao32.com/unix-linux/42.html
2.批量更改文件名 rename
通过 man rename 命令可以得知,rename 命令其实是一个 Perl 脚本命令,
它专用于批量地给多文件重命名(rename multiple files)。
命令格式:
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
perlexpr 是一种 Perl 脚本格式的正则表达式。
参数:
-v, --verbose
Verbose: print names of files successfully renamed.
详细模式:打印成功更改的文件名列表
-n, --no-act
No Action: show what files would have been renamed.
测试模式:并不真正的执行命令,而只是显示哪些文件名应该怎么进行
更改,用于测试模式。
-f, --force
Force: overwrite existing files.
强制模式:在更改文件名,如果更改后的文件已经存在时覆盖已经存在
的文件。
rename 的典型应用:
0. 批量更改文件扩展名
$ ls
1.txt 2.txt 3.txt 4.txt
$ rename 's/.txt/.ext/' *
$ ls
1.ext 2.ext 3.ext 4.ext
1. 批量删除文件扩展名
$ ls
1.txt 2.txt 3.txt 4.txt
$ rename 's/.txt//' *
$ ls
1 2 3 4
2. 批量添加文件扩展名
$ ls
1 2 3 4
$ rename 's/$/.txt/' *
$ ls
1.txt 2.txt 3.txt 4.txt
3. 按自己的方式批量重命名文件
$ ls
1.ext 2.ext 3.ext 4.ext
$ rename 's/(d)/第$1 章/' *
$ ls
第 1 章.ext 第 2 章.ext 第 3 章.ext 第 4 章.ext追问
2. 批量添加文件扩展名
$ ls
1 2 3 4
$ rename 's/$/.txt/' *
$ ls
1.txt 2.txt 3.txt 4.txt
这个具体写一下行吗?
例子里面是加.txt扩展名,你这里是要加.jpg,那么就把例子里面的.txt换成.jpg就可以:
$ ls
1 2 3 4
$ rename 's/$/.jpg/' *
$ ls
1.jpg 2.jpg 3.jpg 4.jpg
你试试看行不行。
linux下批量修改文件名.最近想把一部分文件加上日期序。也就是在文件名称前加上当前的年月日进行输出。
企业软件热点文章
Linux文件系统维护工具 菜鸟无忧 WindowsXP优化备份安全三步走
linux下批量修改文件名.最近想把一部分文件加上日期序。也就是在文件名称前加上当前的年月日进行输出。
获取日期格式如下
Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$ date +%Y%m%d
20091112
1、使用find、awk/grep/sed、mv等命令组合来实现
Ubuntu下
利用awk命令进行制作,操作如下
1)找到需要进行操作的文件名
Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$ find -name ‘*.jpg’ -printf %fn|grep -v ^[0-9] |grep -v logo.jpg
se_platform.jpg
soa1.jpg
soa4.jpg
java_primitive_data_type.jpg
soa3.jpg
soa2.jpg
2)提取文件名,保持文件扩展名不变
Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$ find -name ‘*.jpg’ -printf %fn|grep -v ^[0-9] |grep -v logo.jpg|awk -F ‘.’ ‘print $1’
se_platform
soa1
soa4
java_primitive_data_type
soa3
soa2
3)对文件进行批量替换操作
Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$ find -name ‘*.jpg’ -printf %f n|grep -v ^[0-9] |grep -v logo.jpg|awk -F ‘.’ ‘print $1’|
xargs -i mv .jpg `date +%Y%m%d`.jpg
Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$ ls
20090818a.jpg 20090919twitter4.jpg
20090818learn.jpg 20091110open_project.jpg
20090819java1.png 20091112java_primitive_data_type.jpg
20090819javaseplatformroadmap.gif 20091112se_platform.jpg
20090916neiji.jpg 20091112soa1.jpg
20090916waiji.jpg 20091112soa2.jpg
20090919photo.jpg 20091112soa3.jpg
20090919twitter.jpg 20091112soa4.jpg
20090919twitter2.jpg logo.jpg
20090919twitter3.jpg
利用nawk命令进行制作,操作如下
1)找到要操作的文件名
Zianed@ubuntu:~/sedcommand$ find ./ -type f | grep “log” |sed -n ’s/.///p’
test2.log
test1.log
2)进行文件名更改操作
Zianed@ubuntu:~/sedcommand$ ls *.log
test1.log test2.log
Zianed@ubuntu:~/sedcommand$ find ./ -type f | grep “log” |sed -n ’s/.///p’ |
nawk ‘oldname=$1;$2=`date +%Y%m%d`$1;newname=$1;print “mv ” oldname ” ” newname ’ | /bin/sh
nawk: warning: escape sequence `.’ treated as plain `.’
Zianed@ubuntu:~/sedcommand$ ls *.log
test1_test.log test2_test.log
Zianed@ubuntu:~/sedcommand$
利用sed命令进行制作,操作如下
find / -type f -name “*.sql” | sed s/(.*).sql/mv & 1.pls/’ | sh
2、编写Shell脚本运行
保存为一个Shell脚本
#!/bin/bash
#script_name:rename_ALL
find ./ -type f | grep “txt” |sed -n ’s/.///p’| nawk ‘oldname=$1;
sub(/./,”_test.”);
newname=$1;
print “mv ” oldname ” ” newname ’ | /bin/sh
将上述代码保存为文件rename_ALL
修改脚本的属性,使它能执行:chmod u+x rename_ALL
执行:./rename_ALL
来自网络
看起来很管用,要是能够进行将要改的文件名格式传递进去就更好了。
3、使用rename命令
Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$ rename –help
Unknown option: help
Usage: rename [-v] [-n] [-f] perlexpr [filenames]
man rename发现,
“rename” renames the filenames supplied according to the rule specified as the first argument.
The perlexpr argument is a Perl expression which is expected to modify the $_ string in Perl for at least some of the filenames specified.If a given filename is not modified by the expression,it will not be renamed. If no filenames are given on the command line, filenames will be read via standard input.
For example, to rename all files matching “*.bak” to strip the extension, you might say
rename ’s/.bak$//’ *.bak
To translate uppercase names to lower, you’d use
rename ‘y/A-Z/a-z/’ *
命令格式:
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
perlexpr 是一种 Perl 脚本格式的正则表达式。
files 文件名通配符
参数:
-v, –verbose追问
我自己写了 脚本啦 但是本来没有扩展名的 文件后面加了.jpg扩展名
但是原来有扩展名的的文件变成了 .jpg.jpg 啦 这个怎么弄都改不了
错误: mv: cannot stat `1178549156_l2.jpg.jpg.jpg': No such file or directory 怎么解决啊?
原来有扩展名的 要加入 if 判断呀,分成两类,再去添加扩展名!
参考技术B 写个小脚本就行了.#!/bin/bash
for name in `ls *`
do
mv $name $name.jpg
done
在那个目录执行就可以咯追问
我自己写了 脚本啦 但是本来没有扩展名的 文件后面加了.jpg扩展名
但是原来有扩展名的的文件变成了 .jpg.jpg 啦 这个怎么弄都改不了
错误: mv: cannot stat `1178549156_l2.jpg.jpg.jpg': No such file or directory 怎么解决啊?
linux下的a.out文件
.out文件就是扩展名为out的文件,它本身不代表任何信息。在Linux中判断文件是否是可执行文件,首先要看文件的属性是否是可执行的,它没有一个默认的扩展名表示此文件为可执行文件。为了方便,Linux中可执行文件一般都是没有扩展名的。
在使用gcc编程时,没有指定输入可执行文件名,默认生成可执行文件a.out文件。执行时必须键入命令 ./a.out,即要带上扩展名,如果键入./a 则不正确,因为它寻找a这个文件,而不是a.out这个文件。
a.out是由OMAGIC, NMAGIC, QMAGIC, 或者 ZMAGIC发展过来的一种可执行文件格式.
OMAGIC :在文件头之后就是各个段,但是部分文本段和数据段.
NMAGIC:和OMAGIC差不多,但是数据段在代码段之后加载之后就立即加载数据段,并且将代码段标示位只读.
ZMAGIC:只是增加了对页需求的支持.
QMAGIC:这种格式可以将文件头和代码段的第一页合并起来,这样可以节省空间.它一般会在虚拟地址的最低地址加载一页,来处里NULL地址引起的段错误.
一个典型的a.out文件由一下7部分组成,按顺序有这些段:
exec header:文件头
这一段中含有一些参数,内核利用其中一些参数来把二进制文件加载到内存中并执行.ld利用另外一些参数来连接其它的二进制文件.这个段是唯一含有命令参数的.
text segment:代码段
包括在程序执行时加载到内存中的机器码和相关数据.有可能是只读的.
data segment:数据段
包括初始化过的数据变量.通常是加载到内存中的可写去中.
text relocations:代码重定向
包含编译连接二进制文件时的记录,这些记录使用来更新代码段中的指针.
data relocations:数据重定向
和代码重定向相似,区别是它针对于数据段的指针.
symbol table:符号表
包含连接器对不同二进制文件中的变量,函数和地址之间的对应关系的记录.
string table:字符串表
包含和符号名字相一致的字符串.
每一种二进制文件都是以这样的一个数据结构开始的:
struct exec {
unsigned long a_midmag;
unsigned long a_text;
unsigned long a_data;
unsigned long a_bss;
unsigned long a_syms;
unsigned long a_entry;
unsigned long a_trsize;
unsigned long a_drsize;
};
a_midmag:保存的是主机字节序, I由这些宏来访问其中的部分bit位: N_GETFLAG(), N_GETMID(), N_GETMAGIC(), 由宏 N_SETMAGIC().来设置这个字段.
a_text 代码段的大小Contains the size of the text segment in bytes.
a_data 数据段的大小Contains the size of the data segment in bytes.
a_bss bss segment中字节数和被内核用来初始化数据段之后的BRK (bss = block started by symbol)//这里的理解还是有点问题
a_syms 符号表的大小
a_entry 保存在程序被内核加载到内存中后程序的起始地址,内核由此地址开始执行程序
a_trsize 代码重定向表的大小
a_drsize 数据重定向表的大小
以上是关于linux 没有扩展名的文件怎么添加扩展名的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在 Linux 上使用 QFileDialog 自动向文件添加扩展名
source insight3.5 添加c++ ,无扩展名头文件