Vla*_*zin 5 bash solaris find shell-script mv
我想重命名文件夹中的所有文件,包括名称中的当前时间戳,保留原始扩展名,在 Solaris 中,如下所示:
test1.txt > test1.date.txt
我试过这个,但我失去了名字的第一部分:
find * -prune -type f -name '*.txt' -exec mv {} {}.$(date +'%Y%m%d%H%M').txt \;
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
find . -type f -name '*.txt' -exec sh -c '
now=$( date +%Y%m%d%H%M )
for pathname do
mv "$pathname" "${pathname%.txt}.$now.txt"
done' sh {} +
Run Code Online (Sandbox Code Playgroud)
这将查找当前目录中或当前目录下的所有常规文件的路径名,其名称以.txt. 对于这些批次,将调用一个简短的 shell 脚本。该脚本将首先获取时间戳(为了提高效率,每个批次只有一次),然后遍历给定的路径名。
对于每个路径名,它将通过删除最后一个.txt(使用${pathname%.txt})并添加一个点、时间戳和.txt.
这尚未在 Solaris 上进行测试,但仅使用标准组件和选项等。
要仅计算一次时间戳,请在调用之前find使用
now=$( date +%Y%m%d%H%M ) \
find ...as before (but without assigning to now)...
Run Code Online (Sandbox Code Playgroud)
或者
env now="$( date +%Y%m%d%H%M )" \
find ...as before (but without assigning to now)...
Run Code Online (Sandbox Code Playgroud)
(注意上面两个命令中的续行)
如果文件位于单个目录中,只需运行循环:
now=$( date +%Y%m%d%H%M )
for pathname in ./*.txt; do
mv "$pathname" "${pathname%.txt}.$now.txt"
done
Run Code Online (Sandbox Code Playgroud)
这假定该模式./*.txt匹配您要重命名的所有名称。
有关的:
你的{}.$(date +'%Y%m%d%H%M').txt工作不便携。它可能适用于 的某些实现find,但{}如果{}与另一个字符串一起出现,则不需要实现扩展到当前路径名。
甲
utility_name或者仅含有两个字符参数{}应由电流路径名来代替。如果一个utility_name或参数字符串包含这两个字符{},但不仅仅是这两个字符{},则 find 是替换这两个字符还是不更改地使用字符串是实现定义的。
| 归档时间: |
|
| 查看次数: |
1473 次 |
| 最近记录: |