touch
Linuxのコマンドラインユーティリティと次の例を見ています。地図時間、アクセスまたは変更タイムスタンプを指定された時刻、現在時刻、または参照ファイルに変更する方法を理解します。
しかし、私は次のことをしたいと思います。私のファイルの相対的な期間(相対的な)には、失いたくない貴重な情報が含まれています。しかし、実際よりも数ヶ月若く見えるようにするには、フォルダ内のすべてのファイルが(再帰的に)必要です。したがって、各ファイルは自分自身を参照して時間を追加できますが、フォルダツリー内のすべてのファイルに適用できます。これを行うための良い方法はありますか?
#!/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
:これはglobstar
bashのオプションを設定します。つまり、**
すべてのファイルとゼロ以上のディレクトリとサブディレクトリが一致します。shopt -s dotglob
:(*
および**
)この名前で始まるファイルとも一致させます.
。for f in **; do ...; done
:すべてのファイルを繰り返します。とディレクトリ、別の名前で保存してください$f
。stat -c '%y' "$f"
:現在のファイルまたはディレクトリの現在のタイムスタンプです。date -d $(...) +3 months
:与えられた文字列から3ヶ月後の日付を印刷します(この場合、文字列はコマンドのstat
出力です$f
)。
要約すると、上記のコマンドは現在のフォルダ(すべてのサブディレクトリを含む)にあるすべてのファイルまたはディレクトリの変更日を見つけ、その日付を今後3か月に設定します。