私は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