ファイル名のEPOCH文字列を読み取り可能な形式に変換します。

ファイル名のEPOCH文字列を読み取り可能な形式に変換します。

私のUnixの知識はそれほど良くありません。私はディレクトリ内のファイルセットの名前を変更するシェルスクリプトを作成しようとしています。1709532255.mp4ここで、20240304_070415.mp4エポック1709532255時間は常にエポック時間である。

私は見つけた

date -d @1708532255 +'%Y%m%d_%H%M%S'

...必要な形式を提供しますが、スクリプトで動作させることはできません。

これは私のスクリプトです。

#!/bin/bash
for file in /media/HAVideo/Eingang/Test/2/*.mp4
do
filename=`echo "${file}" | cut -d'.' -f1`
readable=`date -d @$filename +"%Y%m%d%H%M%S"`
mv "${file}" "${readable}"
done

出力は次のとおりです

...
date: invalid date '@/media/HAVideo/Eingang/Test/2/1709532255'
mv: can't rename '/media/HAVideo/Eingang/Test/2/1709532255.mp4': No such file or directory
...

ベストアンサー1

逃したばかりの内容cd:

#!/bin/bash

cd /media/HAVideo/Eingang/Test/2/ || exit # <- what changed
for file in *.mp4
do
filename=`echo "${file}" | cut -d'.' -f1`
readable=`date -d @$filename +"%Y%m%d%H%M%S.mp4"`
mv "${file}" "${readable}"
done

しかし、いくつかの問題があります。

代わりにバックティックを使用してください$( )。そしてインデントを正しくしてください。

バラよりhttp://mywiki.wooledge.org/BashFAQ/082

より良いバージョン:

#!/bin/bash -

cd /media/HAVideo/Eingang/Test/2/ || exit
for file in *.mp4 ; do
    mv -- "$file" "$(date -d "@${file%.*}" +"%Y%m%d%H%M%S.mp4")"
done

${file%.*}組み込みパラメータ拡張

望むより:http://mywiki.wooledge.org/BashFAQ/073そして
LESS='+/Parameter Expansion' man bash
また参照wiki.bash-hackers.org/syntax/pe

これはkshの標準sh演算子であり、このコードにはbashismがないため、shebangを#! /bin/sh -bashの依存関係に変更して削除できます。ただし、これはdate -d非標準のGNU注意であるため、printf '%(format)T'最新バージョンのbash(ksh93からコピー)を使用するとこれを防ぐことができます。

おすすめ記事