我通过“echo”获得的输出在粘贴到终端时作为命令工作,但不在脚本中

Var*_*r87 3 bash shell-script filenames

我正在尝试更改由不幸经常包含空格的应用程序生成的文件。我已经设法让“回声”给我输出,如果复制粘贴到终端中,它就可以工作,但是当我尝试执行命令时,它不起作用。我看了这个答案,它以前对我有帮助,但即使是“${x}”语法在这种情况下似乎也不起作用。

#!/bin/sh
cd ~/Data
IFS=$'\n';for i in $(ls); do
    echo "$i";
    filename="$i"
    date=$(date -n +%Y-%m-%d)
    new_filename="$date$filename"
    echo mv \'"${filename}"\' \'"${new_filename}"\'
    mv \'"${filename}"\' \'"${new_filename}"\'
done;
Run Code Online (Sandbox Code Playgroud)

jim*_*mij 5

主要问题是您遍历ls命令的输出。使用 glob*代替:

#!/bin/sh
cd ~/Data
for i in *; do
    echo "$i"
    filename="$i"
    date=$(date -n +%Y-%m-%d)
    new_filename="${date}${filename}"
    echo mv "${filename}" "${new_filename}"
    mv -- "${filename}" "${new_filename}"
done
Run Code Online (Sandbox Code Playgroud)

此外,我加入--mv以正确处理文件,这名开头-。顺便说一句,我的date命令没有-n选项,但我保留它,因为您可能有不同的版本。