如何更改目录中所有文件的扩展名?

如何更改目录中所有文件的扩展名?

我正在使用 Linux,我想编写一个 shell 脚本,该脚本需要两个目录并将第二个目录移动到第一个目录中(因此第二个目录成为第一个目录的子目录),并且第二个目录中的所有文件都变成“.txt” “ 扩大。例如:dir2包含:

file1
file2
dir3
file3.jmp

跑步后./shell_scrip dir1 dir2,我dir1想要包含 dir2看起来dir2像这样:

file1.txt
file2.txt
dir3
file3.txt

我尝试更改扩展名,但收到此错误:

mv: cannot stat `file1`: No such file or directory

使用以下代码:

#!/bin/sh
for file in $2/*;
do
f=$(basename "$file")
mv "$f" "${f}.txt"
done

答案1

您没有移动或引用 dir2。尝试这样的事情:

#!/bin/sh
mv "$2" "$1"  ||  exit               # Make $2 a subdirectory of $1
cd "$1/$(basename "$2")"  ||  exit   # Change directories for simplicity
for f in *; do
    mv "$f" "${f%.*}.txt"            # Add or change the extension
done

在and命令|| exit之后添加将导致脚本在命令失败时退出,这在情况不符合您预期的情况下提供了一点保护。mvcd

该表达式与名称中没有句点${f%.*}相同。$f否则,它将删除句点(最后一个句点)及其之后的所有内容。

相关内容