ファイルタイムスタンプを3ヶ月ずつ増やす方法(ディレクトリツリーの場合)は何ですか?

ファイルタイムスタンプを3ヶ月ずつ増やす方法(ディレクトリツリーの場合)は何ですか?

touchLinuxのコマンドラインユーティリティと次の例を見ています。地図時間、アクセスまたは変更タイムスタンプを指定された時刻、現在時刻、または参照ファイルに変更する方法を理解します。

しかし、私は次のことをしたいと思います。私のファイルの相対的な期間(相対的な)には、失いたくない貴重な情報が含まれています。しかし、実際よりも数ヶ月若く見えるようにするには、フォルダ内のすべてのファイルが(再帰的に)必要です。したがって、各ファイルは自分自身を参照して時間を追加できますが、フォルダツリー内のすべてのファイルに適用できます。これを行うための良い方法はありますか?

#!/bin/bash
FILES=$(find $HIGHEST_FOLDER -type f -name *.*)
for f in $FILES
do
  touch -ram f -F 7776000 f
  # bumping access and modification timestamps by 3 months?
done

または、find -exec提案どおりに使用することをお勧めしますこれ答え? (このフォルダには多くのファイルがあります。)では、どうすればいいですか?

ベストアンサー1

Linuxシステムを使用しているtouch場合、または少なくともGNUとGNUがあると仮定すると、date次のことができます(bashではzsh同じですが必須ではありませんshopt globstar)。

$ shopt globstar
$ for f in **; do 
    touch -d "$(date -d "$(stat -c '%y' "$f") +3 months")" "$f"
  done

ただし、隠しファイルは無視されます。これらも一致させるには、上記のshopt -s dotglobコマンドの前に実行します。

説明する

  • shopt -s globstar:これはglobstarbashのオプションを設定します。つまり、**すべてのファイルとゼロ以上のディレクトリとサブディレクトリが一致します。
  • shopt -s dotglob:(*および**)この名前で始まるファイルとも一致させます.
  • for f in **; do ...; done:すべてのファイルを繰り返します。とディレクトリ、別の名前で保存してください$f
  • stat -c '%y' "$f":現在のファイルまたはディレクトリの現在のタイムスタンプです。
  • date -d $(...) +3 months:与えられた文字列から3ヶ月後の日付を印刷します(この場合、文字列はコマンドのstat出力です$f)。

要約すると、上記のコマンドは現在のフォルダ(すべてのサブディレクトリを含む)にあるすべてのファイルまたはディレクトリの変更日を見つけ、その日付を今後3か月に設定します。

おすすめ記事