gpt4 book ai didi

Bash 循环用于获取文件名中的前 12 个字符,使用输出为每个文件运行 touch -t 命令

转载 作者:行者123 更新时间:2023-12-04 10:13:52 24 4
gpt4 key购买 nike

我有以下格式的一系列文件:

目录中的 YYYYMMDDHHmmXXXXXX.m4a

我想编写一个脚本,允许我将每个文件名存储为一个变量,我们称之为 MyFile,然后将“YYYMMDDHHmm”(每个文件的前 12 个字符)存储为一个变量,我们称之为 TimeStamp 并将其用于更新循环中每个文件的创建日期数据。该命令应类似于:
touch -t TimeStamp Myfile.m4a
我是编写脚本的新手,并编写了以下内容,在第 17 行返回一个意外的结尾

#!/usr/bin/env bash

for f in /Users/username/music/M4Atest/*.m4a;

do filename=${f%%.*};

echo ${filename};

for ${filename};

do timestamp="${filename:0:12}";

echo ${timestamp};

done;


谢谢你的帮助

最佳答案

一个循环就足够了,使用 ${f##*/}删除最长的前缀模式 */获取文件名。

#!/bin/bash

shopt -s nullglob # expands a glob pattern to a null string if the pattern doesn't match
for f in /Users/username/music/M4Atest/*.m4a; do
filename=${f##*/}
touch -t "${filename:0:12}" "$f"
done

如果你想要一个更安全的文件名模式,你可以使用 [0-9][0-9][0-9][0-9][01][0-9][0-3][0-9][0-2][0-9][0-5][0-9]?*.m4a而不是 *.m4a .这将确保您的文件名至少包含时间戳加上一个字符 ( ? ) 加上任意数量的字符 ( * ) 后跟后缀 .m4a .
# explanation:
# [0-9][0-9][0-9][0-9][01][0-9][0-3][0-9][0-2][0-9][0-5][0-9]?*.m4a
# Y Y Y Y M M D D H H m m

关于Bash 循环用于获取文件名中的前 12 个字符,使用输出为每个文件运行 touch -t 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61176117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com