Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 无法重命名文件并将其从一个位置移动到另一个位置_Shell_Unix - Fatal编程技术网

Shell 无法重命名文件并将其从一个位置移动到另一个位置

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

我需要添加前缀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变量中。

更改代码以使用
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”替换为“*”

检查目标文件夹的权限