【问题标题】:How to pass a variable to the mv command to rename a file text with spaces and the variable's text in a bash (.sh) file如何将变量传递给 mv 命令以重命名带有空格的文件文本和 bash (.sh) 文件中的变量文本
【发布时间】:2016-04-21 18:24:09
【问题描述】:

我创建一个变量并在其中存储日期、日期和时间:

NOW=$(date "+%a %d/%m/%Y% %H:%M")

然后我想将$NOW 传递给mv 命令来重命名文件。

例如使用标题和当前日期创建名为 a.txt 的文件:

printf "File Report (" > ~/Desktop/a.txt
echo $NOW"):\n" >> ~/Desktop/a.txt  

然后我尝试使用名称中包含的变量 ($NOW) 重命名文件:

mv ~/Desktop/a.txt ~/Desktop/'File Report $NOW'.txt

最后一行应该是什么?这两个选项我也试过了。

mv ~/Desktop/a.txt ~/Desktop/'File Report' $NOW.txt

&

mv ~/Desktop/a.txt ~/Desktop/'File Report'${NOW}.txt

【问题讨论】:

    标签: date variables unix terminal mv


    【解决方案1】:

    假设一个合理的 Bourne-like shell(例如 bash),变量替换不会发生在单引号内。您需要使用双引号:

    mv ~/Desktop/a.txt "${HOME}/Desktop/File Report ${NOW}.txt"
    

    (我不确定花括号是否需要,但它们不会受伤)

    您还需要更改日期命令以避免使用斜线。例如:

    NOW="$(date '+%a %d-%m-%Y% %H:%M')"
    

    【讨论】:

    • 它被保存在一个 bash 脚本中。我这样做了,但是它根本没有重命名文件。它保持为a.txt。我也试过mv ~/Desktop/a.txt ~/Desktop/"File Report ${NOW}".txt,也没有重命名文件
    • 这种情况下应该有错误信息。如果没有错误消息,我无法帮助您。
    • mv: rename /Users/MyUser/Desktop/a.txt to ~/Desktop/File Report .txt: No such file or directory 我假设 ~ 没有展开,我必须在双引号中输入确切的目录
    • @joshuatvernon:现在就试试吧。
    • @joshuatvernon:不要生成带有斜线的日期。你不能把它们放在一个文件名中,它们也不能被转义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 2020-11-13
    • 2013-08-27
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    相关资源
    最近更新 更多