ファイル名に変更日を挿入する - 2 件のケース

ファイル名に変更日を挿入する - 2 件のケース

2 つの別々の質問をすることになると思いますが、文脈は同じなので、大丈夫だと思います。

以下に示すようないくつかのプロセスの出力があります (変更できません)。

25978.csv
26044.csv
26865.csv
26914.csv
27013.csv

この入力で実現しようとしているのは、ファイル名に日付を挿入するか、そのファイル名を置き換えるという「簡単な操作」です。必要な日付は通常、最終更新日に対応するため、for f in *.csv; do mv -- "$f" "$f-$(date +%Y%m%d -r "${f}")"; doneワンライナーで名前を変更することができます。最終更新日が、探している日付から 1 日離れている場合もあるため、その数値を減らす簡単な方法 (ワンライナー?) があるかどうか疑問に思っています (例: 20160506 を 20160505 に変換する)。

20150506.csv
20150507.csv
20150508.csv
20150509.csv
20150510.csv

2 番目のケース。最終更新日は完全に間違っているため、役に立ちません。ただし、ファイル名の数字は予想される日付とともに増加します。ファイル名に数値を挿入して、後続の各ファイルで同じ値を 1 つずつ増やすことはできますか? 私が何を達成しようとしているのかおわかりですか? ただ、方法がわかりません ;)...

編集 私の質問に対する答えが見つかりましたここ- そうですね... 使えないだけでしょうか?

cnt=0
for i in *; do
  let cnt=cnt+1
  mv "$i" "$(echo "${i}_${cnt}" | awk -F_ '{print $1"_"$3}')"
done

必要に応じて変更する方法はわかっていますが、最終的にはすべてのファイルで出力が同じになり、「増分が機能していません」というメッセージが表示されます。上記のコードを として保存しrename.sh、 による実行を許可することを思い出しましたがchmod 755 rename.sh、それでも何も思いつきませんでした...

答え1

私自身の質問に答えると、それが犯罪にならないことを願っています。私は部分的な解決策を見つけましたUbuntuに質問する- 少なくとも最初のケースでは、私の場合はうまくいきます。

touch -d "$(date -R -r filename) - 2 hours" filename

サブフォルダー内のすべてのファイルを変更するには、次のように入力します。

find DIRECTORY -print | while read filename; do
    # do whatever you want with the file
    touch -d "$(date -R -r "$filename") - 2 hours" "$filename"
done

関連情報