Nei*_*val 26 unix linux command-line
我想重命名某个目录中的所有文件.将它们重命名为创建日期.
因此,如果我的文件是Image1.jpg,它应该重命名为"Jan 16 12:09:42 2011.jpg"
我想通过命令行执行此操作.我一直在努力:
stat -f %SB Image0100.jpg
Run Code Online (Sandbox Code Playgroud)
但是我如何将它与mv命令结合起来呢?我将如何迭代stat并遍历mv整个文件?
或者是否有简单的方法来重命名所有文件的日期创建?
小智 55
jhead -n DSCN0382.JPG
DSCN0382.JPG --> 0408-150734.jpg
Run Code Online (Sandbox Code Playgroud)
任何strftime参数也可以给出:
jhead -n%Y%m%d-%H%M%S *.jpg
Run Code Online (Sandbox Code Playgroud)
这将以YYYYMMDD-HHMMSS格式重命名与*.jpg匹配的文件
jhead -n%Y%m%d-%H%M%S DSCN0382.JPG
DSCN0382.JPG --> 20120408-150734.jpg
Run Code Online (Sandbox Code Playgroud)
另请参阅手册页以获取许多其他很酷的选项.例如,您可以更正(转移)EXIF日期.当某些相机的时间设置不正确时,合并来自不同相机的文件时非常方便.
fse*_*eto 15
如果您正在使用包含EXIF数据的JPG (即来自数码相机),那么您可以使用以下来获取创建日期而不是stat.
exif -t 0x9003 -m Image0100.jpg
Run Code Online (Sandbox Code Playgroud)
每个请求,这是命令和输出.有几点需要注意:
dst在执行其余命令之前检查它是否有效.for i in *.jpg; do
dst=$(exif -t 0x9003 -m $i ) &&
dst_esc=$(echo $dst | sed 's/ /-/g' ) &&
echo mv $i $dst_esc.jpg
done
Run Code Online (Sandbox Code Playgroud)
'12379632.jpg' does not contain tag 'DateTimeOriginal'.
mv 15084688.jpg 2003:02:28-21:48:54.jpg
mv 15136312.jpg 2003:03:01-10:36:05.jpg
mv 15137960.jpg 2003:03:01-10:36:38.jpg
mv 15140744.jpg 2003:03:01-10:37:46.jpg
Run Code Online (Sandbox Code Playgroud)
for file in *jpg
do
newfile=$(date "+%b %d %H:%M:%S%Y $file" -d "$(stat -c "%y" $file)")
mv "$file" "$newfile"
done$
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26466 次 |
| 最近记录: |