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

你试试看行不行。

参考技术A 可以自己写个脚本!
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++ ,无扩展名头文件

我想知道linux文件是怎么跟打开它用的程序关联起来的

扩展名stat怎么在LInux系统中打开

专家们啊 我想问下 我在svn上传linux下的字符设备型文件的时候怎么传不上去呢 要怎么解决这个问题啊

linux下xampp集成环境中怎么为php添加curl扩展