Linux - 在保持扩展的同时重命名文件

时间:2017-09-17 13:09:19

标签: linux cygwin mv

我有一个目录,其中包含多个具有不同扩展名的文件(pdf,doc,txt等)。

我尝试根据目录名重命名所有文件,同时保持文件扩展名相同。如果所有文件都是PDF,则下面的代码工作正常,否则它也会将txt文件扩展名更改为pdf。

如何在保留文件扩展名的同时重命名文件

mv "$file" "${dir}/${dir}-${count}.pdf"

感谢。

2 个答案:

答案 0 :(得分:0)

你可以通过bash来做到这一点。

你能提供更多细节吗?你如何决定这个$ dir和$ count变量值。

如果您已经知道要更改文件名如下所示

OLD NAME | NEW NAME | Path

test.1 | newtest.1 |路径

arty.2 | xyz.2 |路径

如果你想用特定的名称替换它,那么你可以像上面那样准备一个列表,然后通过while或for循环遍历文件。下面是简单的bash片段,用于您在多个目录下有文件的情况

while IFS="|" read OLD NEW PATH
do
    cd $Path

    filename=`echo $NEW|awk -F '.' '{print $1}'`

    filetype=`echo $NEW|awk -F '.' '{print $2}'`

    mv $OLD $filename.$filetype

done<FILE_PATH

如果想在单个目录下执行操作,则下面的代码段将起作用。

for i in $(ls /tmp/temp)
do 
    filename=`echo $i|awk -F "." '{print $1}'`
    fileType=`echo $i|awk -F "." '{print $2}'`
    mv $i $filename.$fileType
done

答案 1 :(得分:0)

我假设你在某种循环中这样做?如果是这样,您可以先使用

获取文件扩展名
ext="${file##*.}"  # eg. ext="txt", ext="pdf"...

并在pdf命令中将$ext替换为mv。使用shbashdashksh进行了测试。