此代码
my_file="/tmp/file_without_spaces"
if [ -f "${my_file}" ]; then
my_ls_aaaammgg_hhss="$(ls ${my_file} -l --time-style='+%Y%m%d_%H%M%S' | cut -d' ' -f6)"
mv "${my_file}" "${my_file}_${my_ls_aaaammgg_hhss}"
fi
例如变成。/tmp/file_without_spaces
/tmp/file_without_spaces_aaaammgg_hhss
/tmp/file_without_spaces_20250218_161244
例如,我怎样才能对名称中带有空格的文件执行相同的操作
/tmp/file with spaces
?
我想要得到/tmp/file with spaces_20250218_161244
。
使用 GNU 实现的
date
和现代的,你可以做什么bash
:如果对输出满意则从命令
echo
中删除。mv
请注意,对于符号链接类型的文件,
[[
's-f
和 GNUdate -r
将分别查看目标的类型和 mtime,这可能就是您想要的。ls -ld
(您忘记了-d
顺便说一句)会查看符号链接本身。至于文件名,您需要将变量扩展放在双引号中,以防止单词拆分弄乱它,例如
您几乎已经完成了。如果您尝试运行此命令,bash 将为您提供有关出错位置的线索,具体来说:
...这里
${my_file}
会扩展为多个单词,然后才呈现给ls
。您可以通过引用它来避免这种情况:(里面的双引号
$(...)
与外面的双引号不匹配)。