以下のスクリプトを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