ファイル名に変更された日付を挿入する - 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オネライナーを使用して名前を変更できます。時々、最後に変更された日付が私が探している日付と日が異なる場合があるので、その値を減らす簡単な方法(oneliner?)があるかどうか疑問に思います(例: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

おすすめ記事