Shell 无法重命名文件并将其从一个位置移动到另一个位置
我需要添加前缀C,然后将文件从tmp位置移动到目标位置。 这是剧本 我不允许在当前目录中放置脚本Shell 无法重命名文件并将其从一个位置移动到另一个位置,shell,unix,Shell,Unix,我需要添加前缀C,然后将文件从tmp位置移动到目标位置。 这是剧本 我不允许在当前目录中放置脚本 for tmpfile in /home/asmita/tmp do mv "$tmpfile" "C_${tmpfile}" mv "C_${tmpfile}" /home/tgasmita done 当我尝试移动带前缀的文件时,我得到一个错误C\u/home/asmita/tmp/xyz.txt找不到。因为整个路径存储在tmpfile变量中。更改代码以使用basenam
for tmpfile in /home/asmita/tmp
do
mv "$tmpfile" "C_${tmpfile}"
mv "C_${tmpfile}" /home/tgasmita
done
当我尝试移动带前缀的文件时,我得到一个错误C\u/home/asmita/tmp/xyz.txt找不到。因为整个路径存储在tmpfile变量中。更改代码以使用
basename
和dirname
命令获取文件名和目录名。使用这些值组合这些值并获得新路径
for tmpfile in /home/asmita/tmp
do
DIRPATH=$(dirname "${tmpfile}")
FILENAME=$(basename "${tmpfile}")
mv "$tmpfile" "${DIRPATH}C_${FILENAME}"
mv "${DIRPATH}C_${FILENAME}" /home/tgasmita
done
有很多方法可以做到这一点。首先让我修改你的脚本 1.在下面的代码中,确保只传递文件名而不是完整路径。只有知道文件名时,以下脚本才有效
#!/bin/sh
for tmpfile in /home/asmita/tmp
do
mv "{tmpfile}/filename.txt" "/home/tgasmita/C_filename.txt"
done
2.如果您不知道文件名,并且希望重命名.txt文件并将其移动到另一个文件夹,那么您可能需要下面的脚本
#!/bin/sh
lines=`find /home/asmita/tmp -name "*.txt" -printf "%f\n";`
for i in ${lines[@]}
do
mv "/home/asmita/tmp/${i}" "/home/tgasmita/C_${i}"
done
请注意,我只在源文件夹中查找文本文件(/home/asmita/tmp
)您可以根据需要将.txt更改为其他扩展名。如果要移动并重命名源文件夹中的所有文件,只需将第二行中的“*.txt”替换为“*” 检查目标文件夹的权限