ディレクトリに親フォルダを作成するより古いファイルを見つけて、そこに移動します


0

私は次のことを行うbashスクリプトを作成しようとしています。

findコマンドを使用して、7日より古いファイルを検索しfind . -type f -mtime +7 ! -iname '.*'(、見つかったファイルの親ディレクトリを取得parent directoryし、別のディレクトリに名前を持つ新しいフォルダーを作成し、_todaysDatedate '+%m%d&y)を追加して、そこに見つかったファイルを移動します。

これを行うには何が最善でしょうか?whilefordoループ?どうやってそれをやりますか?

前もって感謝します!

編集:ファイル構造の例を示します

folder1
   - folder2
      -oldfile1

folder1a
   - folder2a
      -folder3a
        -oldfile2

----
In a new directory, a new folder would be created ( and that folder's name would be the parent folder of the old file, and tagged with a date (_040114) - this is where i get the format date '+%m%d%y) and the old files would then be moved in there. Example below -

- new_directory
  - folder2_date
    - oldfile1
  - folder3a_date
    - oldfile2

これが私がやろうとしていることを明確にすることを願っています。

回答:


0

あなたの仕様は、ファイル構造の例を実際に使用することができます。これは、解釈の余地が大きいためです。どちらが必要ですか(多くの一般的なユースケースのうち、それぞれが異なる答えを取得します)。

ここから始めましょう。私は次のことを仮定しました:

  • / HERE /からスクリプトを実行しています
  • アーカイブファイルを/ THERE /に配置したい場合
  • サブディレクトリを含むディレクトリで実行している(例:/HERE/lie/old/files.txt)
  • /THERE/lie_MMDDYY/old/files.txtのようなものが欲しい

find . -type f -mtime +7 -printf '%h\n' \ | sort -u \ | sed -e 's,^./,,' \ | while read olddir do moveto="/THERE/$(echo \"$olddir\" | cut -d/ -f1)_$(date +%m%d%y)/$(echo \"$olddir\" | cut -d/ -f2-)" echo mv "$olddir" "$moveto" done

「怒り」で実行する準備ができたら、「エコー」を削除します。この1行すべてを用意しましたが、読みやすくするために分割しました。

出力がより簡単にソートされるため、日付形式を変更して$(date -I)を使用することをお勧めします。


上記の編集はあなたにもっと例を示していますか?あなたはすべてがかなり近いと仮定していると思います。上記の編集により、これに取り組む方法が変わりますか?
PhDeOliveira 14

私は答えをあなたに授与するつもりです。ありがとう@ cameron-kerr!
PhDeOliveira 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.