ファイルタイムスタンプで定義された月と年を追加してファイルの名前を変更します。

ファイルタイムスタンプで定義された月と年を追加してファイルの名前を変更します。

以下のスクリプトをMYFILESディレクトリに保存してxファイルを作成し、そのタイムスタンプが数年と数ヶ月にわたってランダムに実行されるようにしました。

for i in {1938..2037}; do   
    ## create a file with a random month
    touch -d "${i}-$((RANDOM % 12 + 1))-01" file_$((i-1937))
    done  
output:
-rw-r--r-- Users   0 Jul  1  1938 file_1
-rw-r--r-- Users   0 Jun  1  1947 file_10
-rw-r--r-- Users   0 Oct  1  2037 file_100 

MYFILESディレクトリの内容を分析し、サブディレクトリFILES2のファイルをソートしてから、タイムスタンプに基づいてファイル名を変更するスクリプトを作成する方法を学びます。

出力例は次のようになります。

rw-r--r-- Users   0 Jul  1  1938 file_JUL1938
rw-r--r-- Users   0 Jun  1  1947 file_JUN1947
rw-r--r-- Users   0 Oct  1  2037 file_OCT2037

ベストアンサー1

情報を収集して反転するには、GNUの日付と統計を使用してください。

for f in *
do
  ref=$(stat -c %y "$f" | awk '{print $1}')
  mon=$(date -d "$ref" +%b)
  year=$(date -d "$ref" +%Y)
  echo mv -- "$f" "file_${mon^^}${year}"
done

これは bashism を使用して月を大文字で表示します。使用できない場合は使用してくださいecho "$mon" | tr '[:lower:]' '[:upper:]'。別のオプションは、最も近い日付関数を使用して月の大文字のバージョンを返すことですdate +%^b

サンプルファイルを生成するには:

touch -d 1938-07-01 file_1
touch -d 1947-06-01 file_10
touch -d 2037-10-01 file_100

サンプル入力のスクリプト出力:

mv -- file_1 file_JUL1938
mv -- file_10 file_JUN1947
mv -- file_100 file_OCT2037

おすすめ記事