use*_*779 2 linux filenames timestamps
我正在学习 Linux 命令。
使用时序信息重命名文件名时,会:自动分配标记。我怎样才能把这个:标志改成_?
下面是一个文件名示例。它已更新时间信息。如何通过更换命名它:有_?
ee_Sun_Aug_11_22:20:27_GMT-8_2019.txt
Run Code Online (Sandbox Code Playgroud)
另外,为什么下面不起作用?
$ cp /var/log/ee.txt ee_`date`.txt
cp: target `2019.txt' is not a directory
Run Code Online (Sandbox Code Playgroud)
要遍历当前目录:中名称中至少包含一个字符并以 结尾的所有文件,并将字符.txt更改:为_,使用 ksh93、zsh、bash、mksh shell(或最新版本的 busybox sh),您可以用
for name in ./*:*.txt; do
newname=${name//:/_}
mv -i "$name" "$newname"
done
Run Code Online (Sandbox Code Playgroud)
或者,更短,
for name in ./*:*.txt; do
mv -i "$name" "${name//:/_}"
done
Run Code Online (Sandbox Code Playgroud)
参数替换${name//:/_}将所有改变:到_在任意位置的值$name(一个ksh93的操作员也由壳体支持上面提到的)。
该mv -i会重命名文件,但会要求确认如果新名称已被使用。
您作为示例显示的文件名将更改为ee_Sun_Aug_11_22_20_27_GMT-8_2019.txt.
你的命令
cp /var/log/ee.txt ee_`date`.txt
Run Code Online (Sandbox Code Playgroud)
不起作用,因为date输出一个带有空格的字符串。这些空格会让cp您认为您想将多个文件复制到一个目录中。因此,“不是目录”错误。
以下方法效果会更好:
cp /var/log/ee.txt "ee_$(date).txt"
Run Code Online (Sandbox Code Playgroud)
它工作得更好,不是因为我把你的反引号改成了,$(...)而是因为我用双引号引用了新名称。
这将创建文件ee_Sun Aug 11 16:57:37 CEST 2019.txt(或类似的东西)。
为了获得更简洁的文件名,您可能需要date更精确地指定输出格式:
cp ee.txt "ee_$(date +"%F_%H-%M-%S").txt"
Run Code Online (Sandbox Code Playgroud)
格式字符串%F_%H-%M-%S将strftime(3)在您的系统手册 ( man 3 strftime) 或date命令手册中进行描述,您最终会得到类似ee_2019-08-11_16-59-55.txt. 如果您date不支持该%F指令,则可以替换为%Y-%m-%d.
或者,
cp ee.txt "$(date +"ee_%F_%H-%M-%S.txt")"
Run Code Online (Sandbox Code Playgroud)
(让date命令格式完成创建新文件名的大部分工作)
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |