- ベストアンサー
Linuxコマンドでファイルを作成日ごとに分類する方法
- Linuxのコマンドを使用してファイルを作成日ごとに分類する方法を説明します。
- フォルダAにあるファイルを作成日を参考にして、対応する日付のフォルダに移動する方法を解説します。
- 作成日ごとに分類されたフォルダ内には、指定された拡張子(.MOV、.AVI)のファイルが保存されます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ファイルの日付を取得するにはlsコマンドの「--full-time」オプションを使用します。 実行例 >ls --full-time -rw-rw-rw- 1 hoge hoge 69 2014-06-27 14:00:00.158349853 +0900 test.txt 上記表記は一例です。 6カラム目が日付(2014-06-27)ですから、現在のディレクトリにあるファイルの日付のみを取得するのであれば、以下のコマンドで取得できますね。 >ls --full-time ./*.mov |awk '{print $6}' これをリダイレクトでlist1.txtに落とします。 >ls --full-time ./ |awk '{print $6}' > list1.txt 日付重複の可能性がありますから、list1.txtから重複行を削除します。 sort list1.txt |uniq > sorted_list1.txt これでsorted_list1.txt ファイルには「カレントディレクトリにある全ての.movファイルの日付一覧(重複削除済)」が完成したことになります。 あとは「このファイルの内容を1行目から順次読み込む」「読み込んだパラメータ(日付情報)にてディレクトリ作成→ファイルムーブ」すれば良いでしょう。 順次読み込みの例(参考URL) http://www.sssg.org/blogs/hiro345/archives/6559.html http://sweng.web.fc2.com/ja/program/bash/read-each-line.html 一例ですが、 filename=./sorted_list1.txt cat ${filename} |while read line do mkdir $line mv ` ls --full-time | grep $line | awk '{print $9}'` ./$line/. done というような感じの記述でしょうか。 (上記記述は動作確認していませんので、あくまで参考に・・・) ls --full-time の表記はOS等によって異なりますから、awkの部分のカラムの位置等は実際に確認をしてから適宜変更する必要があります。 以上、ご参考まで。
その他の回答 (3)
- notnot
- ベストアンサー率47% (4900/10358)
そもそも、Unix/Linuxだと、ファイルの作成日は記録されていませんので、文字通りには不可能です。 ファイルの最終更新日でいいのなら、 cd folderA for x in *.MOV *.AVI do if test -f "$x" then date=`date -r "$x" +%Y年%m月%d日` mkdir "$date" 2>/dev/null mv "$x" "$date" fi done ただし、簡単にするために日付は2桁です(2014年06月27日など)。 上位ゼロを削除するなら、 date=`date -r "$x" +%Y年%m月%d日 | sed -e s/年0/年/ -e s/月0/月/` です。
- MillenniuM
- ベストアンサー率58% (42/72)
Ruby スクリプトで、手軽に書くと、こんな感じでしょうか。 第1引数にディレクトリを指定します。 http://pastebin.com/UjkHSNmV
- Wr5
- ベストアンサー率53% (2173/4061)
実際にやってはいませんが…まぁ、目安として。 >1. ファイルの作成日を調べる statコマンドで-cオプション付で指定したらよいかと。 作成日がどれにあたるのかは不明ですが。 # ModifyなのかChangeなのか…。 http://linuxjm.sourceforge.jp/html/GNU_coreutils/man1/stat.1.html %W辺りですかねぇ…。 で、UNIX TIMEなどで取得してdataコマンドで書式化してください。 >2. その作成日のフォルダがあれば調べる(なければ新規作成する) testコマンドで有無の確認は可能かと。 # 「シェルスクリプト ディレクトリ 存在確認」辺りで検索すればそれなりに見つかるものと思われます。 ファイルの移動はmvコマンドで可能でしょう。 >3. 次のファイルをチェックする、以下ループ 普通にシェルスクリプトでループですかね。
お礼
ありがとうございます。 awk で欲しい情報が取得できました。 助かります。 基礎をやらないとダメだと痛感し、ちょっと厚めの自習本を買いました。