私の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からコピー)を使用するとこれを防ぐことができます。