gpt4 book ai didi

linux - 通过 Bash 重命名和转换文件名

转载 作者:太空宇宙 更新时间:2023-11-04 05:40:25 25 4
gpt4 key购买 nike

我是新手,所以请不要骂我。我需要在 Linux 中通过 shell 脚本(bash)将文件从旧名称重命名并转换为新名称。我有一个类似 now_360p_2014-05-19-13.21.14.266-FET_0.mp4 的文件,但我需要获取这个 2014-05-19_13-21-14_now_360p_0.mp4我怎样才能做到这一点?

小补充 - 如果文件正在被其他进程使用,则无法触摸。我尝试过此方法来探索更改命令的新结果:

#!/bin/bash

for f in (/opt/media/rec/*.mp4);
do
nf=$(echo $f | sed -r 's/([^.]+\.)([^.]+\.)([0-9])_([^_]+)(.*)/\1\4_\2\3\5/')
echo mv $f $nf
done

但是我有一个错误((

auto.sh: line 3: syntax error near unexpected token ('
'uto.sh: line 3:
for f in (/opt/media/rec/*.mp4);

最佳答案

要处理这些“基于列”的模式,awk 会更容易:

kent$  echo "now_360p_2014-05-19-13.21.14.266-FET_0.mp4"|awk -F_ -v OFS="_" '{print $3,$1,$2,$4}'
2014-05-19-13.21.14.266-FET_now_360p_0.mp4

更新

我没有仔细检查你想要的输出。您还想更改其他一些内容,例如日期和时间之间的 dotFET-...现在这应该适合您(gawk):

awk -F_ -v OFS="_" '{sub(/\.[^.]*$/,"",$3);
$3=gensub(/-([^-]*$)/,"_\\1","g",$3);
gsub(/\./,"-",$3);
print $3,$1,$2,$4}'

以你的例子:

kent$  echo "now_360p_2014-05-19-13.21.14.266-FET_0.mp4" |
awk -F_ -v OFS="_" '{sub(/\.[^.]*$/,"",$3);
$3=gensub(/-([^-]*$)/,"_\\1","g",$3);
gsub(/\./,"-",$3);
print $3,$1,$2,$4}'
2014-05-19_13-21-14_now_360p_0.mp4

关于linux - 通过 Bash 重命名和转换文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23736870/

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