Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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
Linux Bash从路径变量重命名_Linux_Bash_Scripting - Fatal编程技术网

Linux Bash从路径变量重命名

Linux Bash从路径变量重命名,linux,bash,scripting,Linux,Bash,Scripting,我正在做一个“回收站”类型的脚本,我已经全部完成了,但是如果一个文件已经存在,我尝试还原该文件,我希望它让用户为要还原的文件选择一个新名称,因为,我有从变量$F1中删除该文件的完整路径,我只是不知道如何在这里更改文件名 #!/bin/bash TRASHCAN ="/home/alihassan/Desktop/Trashcan" cd $TRASHCAN F1=$( grep "$1" storage.txt ) if [ -f $F1 ] then echo "File alrea

我正在做一个“回收站”类型的脚本,我已经全部完成了,但是如果一个文件已经存在,我尝试还原该文件,我希望它让用户为要还原的文件选择一个新名称,因为,我有从变量$F1中删除该文件的完整路径,我只是不知道如何在这里更改文件名

#!/bin/bash

TRASHCAN ="/home/alihassan/Desktop/Trashcan"
cd $TRASHCAN
F1=$( grep "$1" storage.txt )
if [ -f $F1 ]
    then echo "File already exists at the restore location, please enter a new filename"
    read ANS
    mv "home/alihassan/Desktop/Trashcan/$1" "$F1/$    #ISSUE IS HERE
else
    mv "/home/alihassan/Desktop/Trashcan/$1" "$F1"
fi
用于查找原始目录:

readans
mv“home/alihassan/Desktop/Trashcan/$1”“${F1%/*}/$ANS”
正如Jonathan所评论的,没有什么可以阻止您在现有文件之上“恢复”文件,覆盖它。在执行该操作之前,您可能需要测试还原位置是否存在,例如:

while read ANS; do
    if [ ! -f "${F1%/*}/$ANS" ]; then
        mv "home/alihassan/Desktop/Trashcan/$1" "${F1%/*}/$ANS"
        break
    else 
        echo "File already exists - please choose another name"
    fi
done

表面上看,你可能在追求:

mv "$TRASHCAN/$1" $(dirname "$F1")/"$ANS"

这将为除最后一个组件之外的所有组件保留从
$F1
开始的原始路径,然后使用答案代替最后一个组件。

basename“$F1”
是您所需要的。但当我将其移动到其原始目录时,我将移动到$F1,如何将文件名附加到$ans例如grep行返回一个带有完整路径的变量,例如/home/alihassan/Desktop/pie,我只想更改该路径的结尾不要忘记垃圾箱可能包含来自三个不同源目录的名为makefile的文件的五个副本。要在还原到替代名称之前检查该名称是否不存在?