Bash从路径变量重命名

时间:2014-03-10 14:06:03

标签: linux bash scripting

我正在做一个“回收站”类型的脚本,我已经完成了所有操作但是如果一个文件已经存在我尝试恢复文件我希望它让用户为要恢复的文件选择一个新名称因为,我有变量$ 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

2 个答案:

答案 0 :(得分:1)

从表面上看,你可能会追随:

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

除了最后一个组件之外,它保留了除$F1以外的所有原始路径,然后使用答案代替最后一个组件。

答案 1 :(得分:0)

使用parameter expansion查找原始目录:

read ANS
mv "home/alihassan/Desktop/Trashcan/$1" "${F1%/*}/$ANS"

正如Jonathan评论的那样,没有什么可以阻止你在现有文件的基础上“恢复”文件,覆盖它。您可能希望在执行mv之前测试是否存在还原位置,例如:

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