我正在使用 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
之后添加将导致脚本在命令失败时退出,这在情况不符合您预期的情况下提供了一点保护。mv
cd
该表达式与名称中没有句点${f%.*}
相同。$f
否则,它将删除句点(最后一个句点)及其之后的所有内容。