
私は現在UNIX bashを使用しており、ファイルパス名の情報を使用して日付項目を変更できるシェルスクリプトを作成したいと思います。
背景:以前は、ディレクトリに配置されていない200個のファイルがありました。私のスクリプトが完成したら、自動的に各ファイルの最初の行(YY / MM / DD)を見つけて、各ファイルを年のディレクトリに置き、月と日のサブディレクトリに入れます。たとえば、2002/12/19 は 2002 というディレクトリに保存され、次に 12 というサブディレクトリ、19 という別のサブディレクトリに保存されます。各ファイルには4つの情報があります。日付は常に最初の行です。はいPic912831(ファイル名)2005/02/23水曜日2月バルセロナファイルの最初の行が他のほとんどのファイルと異なるため、ディレクトリにまだ保存されていないファイルが多いことがわかります。ディレクトリと一致しないファイルの1つを調べたところ、日付は「2005-02-23」で、一致するファイルは「2004/05/14」であることが確認されました。この場合、以下を使用する必要があるようです。
tr '-' '/'
私の要件と何をすべきか:
- 無効または一致しないすべてのファイルを識別します。
- 一時ファイルに正しい最初の行をエコーします(私の考えでは年?)。
- 既存のファイルの最後の3行(日、月、場所)を追加します。
- 一時ファイルを移動して既存のファイルを上書きする
もちろん、これが本当であることを理解しています。
echo $directory > temp tail -3 $file >> temp mv temp $file
ファイル名を変更する必要はありません。間違ったファイルを識別し、上記の手順を実行するだけです。私は仕事をきれいに保つために、一致しないファイルをYY-MM-DDではなくYY / MM / DD形式にしたいと思います。要約すると、ファイルと一致しない日付項目を変更するスクリプトを作成したいと思います。
答え1
日付構造に関する情報が必要ない場合(たとえば、常にYYYY / MM / DDまたはYYYY-MM-DD形式の場合)、非常に単純なコマンドを使用してファイル全体の最初の行を変更できます。ディレクトリツリー。
find . -type f -exec sed -i '1 s:-:/:g' {} \;
sed -i
ファイルをすぐに編集できるので、リンクしたり移動したりする必要はありません。'1 ...
各ファイルの最初の行のみを編集します。's:-:/:g'
行の「-」のすべてのインスタンスを「/」に置き換えます。
その後、元のスクリプトを再実行し、ファイルを正しい日付ディレクトリにソートできます。