如何添加和更改目录中文件的扩展名?

时间:2017-10-05 05:33:34

标签: bash

我有一个目录,里面有几个文件和目录。我想将扩展名.ext添加到所有文件中。有些文件有扩展名(不同类型的扩展名),有些文件没有扩展名。

我正在使用Ububtu 16.04。

我读了几个关于它的答案,但我无法理解它们。

2 个答案:

答案 0 :(得分:1)

在bash中:

$ for f in * ; do if [ -f "$f" ] ; then t="${f%.*}" ; mv -i "$f" "$t".ext ; fi ; done

说明:

for f in *               # loop all items in the current dir
do 
  if [ -f "$f" ]         # test that $f is a file
  then
    t="${f%.*}"          # strip extension off ie. everything after last .
    mv -i "$f" "$t".ext  # rename file with the new extension
  fi
done

测试:

$ touch foo bar baz.baz 
$ mkdir dir ; ls -F
bar  baz.baz  dir/  foo
$ for f in * ; do if [ -f "$f" ] ; then t="${f%.*}" ; mv -i "$f" "$t".ext ; fi ; done
$ ls
bar.ext  baz.ext  dir/  foo.ext

例如,如果有些覆盖可能会发生;文件foofoo.foo。因此,我将-i切换添加到mv。一旦理解了上述脚本的作用,就将其删除。

答案 1 :(得分:0)

这是你所需要的:

find . -name "*" -type f|awk 'BEGIN{FS="/"}{print $2}'|awk 'BEGIN{FS=".";ext=".png"}{system("mv "$0" ./"$1ext"")}'

[root@myIP check]# ls -lrt
total 0
-rw-r--r--. 1 root root 0 Oct  5 08:08 abc
-rw-r--r--. 1 root root 0 Oct  5 08:08 hello.txt
-rw-r--r--. 1 root root 0 Oct  5 08:08 something.gz
[root@myIP check]# find . -name "*" -type f|awk 'BEGIN{FS="/"}{print $2}'|awk 'BEGIN{FS=".";ext=".png"}{system("mv "$0" ./"$1ext"")}'
[root@myIP check]# ls -lrt
total 0
-rw-r--r--. 1 root root 0 Oct  5 08:08 abc.png
-rw-r--r--. 1 root root 0 Oct  5 08:08 hello.png
-rw-r--r--. 1 root root 0 Oct  5 08:08 something.png