こんにちは

Linuxのコマンドでファイルを分類したいのですがやり方がよくわかりません。
記述の仕方を教えてください。特に作成日を取得してそこからフォルダを作るループがわかりません。

folderAに100件ほどファイルがあります。
ファイルの作成日に応じてフォルダに振り分け(移動)したいと思います。

1. ファイルの作成日を調べる
2. その作成日のフォルダがあれば調べる(なければ新規作成する)
例:作成日が「2014年6月27日」の場合は「2014年6月27日」というフォルダに入れる/作って入れる
3. 次のファイルをチェックする、以下ループ

ファイルは *.{MOV,AVI} です。

終わった後は
folderAの下に「2014年6月27日」や「2014年6月20日」などのフォルダができています。
folderAの直下に*.{MOV,AVI}は存在しなくなります。
1つの日付フォルダに複数のファイルが入ってもかまいません。
日付フォルダは抜けがあってもかまいません(20日と22日があって21日がないなど)

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (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. …
http://sweng.web.fc2.com/ja/program/bash/read-ea …

一例ですが、
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の部分のカラムの位置等は実際に確認をしてから適宜変更する必要があります。

以上、ご参考まで。
    • good
    • 0
この回答へのお礼

ありがとうございます。

awk で欲しい情報が取得できました。
助かります。

基礎をやらないとダメだと痛感し、ちょっと厚めの自習本を買いました。

お礼日時:2014/07/12 20:19

そもそも、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/月/`
です。
    • good
    • 0

Ruby スクリプトで、手軽に書くと、こんな感じでしょうか。


第1引数にディレクトリを指定します。
http://pastebin.com/UjkHSNmV
    • good
    • 0

実際にやってはいませんが…まぁ、目安として。



>1. ファイルの作成日を調べる

statコマンドで-cオプション付で指定したらよいかと。
作成日がどれにあたるのかは不明ですが。
# ModifyなのかChangeなのか…。
http://linuxjm.sourceforge.jp/html/GNU_coreutils …
%W辺りですかねぇ…。
で、UNIX TIMEなどで取得してdataコマンドで書式化してください。

>2. その作成日のフォルダがあれば調べる(なければ新規作成する)

testコマンドで有無の確認は可能かと。
# 「シェルスクリプト ディレクトリ 存在確認」辺りで検索すればそれなりに見つかるものと思われます。
ファイルの移動はmvコマンドで可能でしょう。

>3. 次のファイルをチェックする、以下ループ

普通にシェルスクリプトでループですかね。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q復元ポイントの作成とイメージファイル等のバックアップとの違いについて

今晩は、宜しくお願いします。

復元ポイントの作成とイメージファイル等のバックアップとの違いについて教えて下さい。

Windowsで復元ポイントからシステムを復元させる方法があり、
また、イメージファイル等にバックアップをとり、復元させる方法もありますが
この両者はどのように違うのでしょうか。

復元ポイントの作成とは、その時点のシステムの設定等だけを保存しているという
ことでしょうか。

また、イメージファイル等のバックアップを作成するということは
システム設定と作成したファイル等もイメージファイルとして一括してバックアップ
されるのでしょうか。

イメージファイルの復元時に、作成したファイル等もイメージファイルから
復元されるのなら、同じ名前のファイルがあった場合には、
イメージファイル作成時の古い情報のファイルになってしまうのでしょうか。

以上、宜しくお願いします。

Aベストアンサー

【システムの復元】
Windowsが使用するシステムファイルのバックアップと復元。
ユーザーファイルには影響しない。
HDDの中に作成されるので、Windowsが起動しない環境では使用出来ない。

【システム修復ディスクの作成】
Windowsの起動時にF8を押下して起動するセーフモードから「コンピューターの修復」「システム回復オプション」を、外部記憶装置(CD、USBメモリなど)から起動出来るようにする。
Windows自体が起動しなくなった場合に、外部記憶装置から「システム回復オプション」が起動出来るようになる。修復されるのは、選択した項目により異なる。
WindowsREを利用。
https://msdn.microsoft.com/ja-jp/library/hh825173.aspx

【バックアップと復元】
システムのバックアップを作成し、ハードディスクなどが壊れた場合に備えパソコン内部のデータを全てバックアップ・復元出来る。
Windowsのインストールディスクや、システム修復ディスクから復元が可能。
システムもユーザーデータもバックアップを取った時点の状態に戻る。

【システムの復元】
Windowsが使用するシステムファイルのバックアップと復元。
ユーザーファイルには影響しない。
HDDの中に作成されるので、Windowsが起動しない環境では使用出来ない。

【システム修復ディスクの作成】
Windowsの起動時にF8を押下して起動するセーフモードから「コンピューターの修復」「システム回復オプション」を、外部記憶装置(CD、USBメモリなど)から起動出来るようにする。
Windows自体が起動しなくなった場合に、外部記憶装置から「システム回復オプション」が起動出来るようになる。...続きを読む

Qlinux:ネットワークアダプタ機器名の情報がわかるコマンド、ファイルはないのでしょうか。

Fedora1を使用しています。Windowsではipconfig /allとやるとネットワークカードの機器名も表示されるとおもいますが、linuxのifconfig -aではわかりません。アダプタ機器名の情報はlinuxでは確認できないのでしょうか。あと、マザーボードの製品名や製品番号等の情報も何かのファイルに書かれていないでしょうか。やはりケースを開けて目で確認するしかありませんか?

Aベストアンサー

とりあえずNICの名前(製品名ではなく)ですが、

起動直後に、dmesgコマンドを実行する
/proc/pciをみる
lspciコマンド
hwbrowserコマンド

などでいかがでしょう?

Q救出ファイル復元 2の機能について

「救出ファイル復元 2」で画像ファイルJPEGの他にRAWファイル、拡張子(CR2)を復元出来るでしょうか。

キャノンの一眼デジカメを使っているのですが、他の復元ソフトでは、復元出来ませんでした。

Aベストアンサー

Vectorあたりで『ディスク・ファイル復旧』の項目で探せばみつかりそうですが。
要は,"復元ソフトで復元できるファイルがソフトに登録されている拡張子だけしかできない"ことですので,拡張子を選択できる復元ソフトを捜せばいいと思われます。

参考URL:http://www.vector.co.jp/vpack/filearea/win/util/disk/care/

Qコマンドプロンプトで、linuxのlocateコマンドのようなコマンドはありますか?

vista ultimateを使っています。

端的にいうと、
Cドライブ配下全体で、.log,.msi.install.exe,setup.exe
のどれかの文字列を含むファイル一覧を表示させたいと思っています。
(できれば、

☆含むではなく、
.logで終わる
or
.msiで終わる
or
install.exeと完全一致
or
setup.exeと完全一致

☆なおかつ、できれば、大文字小文字を区別しない

☆なおかつ、できれば、結果は、ファイル名だけでなく、フルパスで知りたい

と思っています。

で、いま、vistaが立ち上がらないエラーが起きているので、
vistaのメディアから、コマンドプロンプトで、
それを実行しようとしています

そこで。。。一案ですが・。。
コマンドプロンプトで、
linuxのlocateコマンドのようなコマンドはありますか?
findというのがそれかなと思ったのですが、
linuxにおけるgrepと同じようでして。

ご存知の方いらっしゃいましたら、よろしくお願いします。

vista ultimateを使っています。

端的にいうと、
Cドライブ配下全体で、.log,.msi.install.exe,setup.exe
のどれかの文字列を含むファイル一覧を表示させたいと思っています。
(できれば、

☆含むではなく、
.logで終わる
or
.msiで終わる
or
install.exeと完全一致
or
setup.exeと完全一致

☆なおかつ、できれば、大文字小文字を区別しない

☆なおかつ、できれば、結果は、ファイル名だけでなく、フルパスで知りたい

と思っています。

で、いま、vistaが立ち上がらないエラーが起きて...続きを読む

Aベストアンサー

C:
CD \
DIR /S /P *.log
DIR /S /P *.msi
DIR /S /P install.exe
DIR /S /P setup.exe

Q削除した画像ファイルの取り出しまたは復元方法

ごみ箱に入れてから削除したファイルの復元方法を教えてください。

以前にも同様の質問をしたのですが、その際に教えていただいた方法で確かにいくつかのファイルは復元することができました。

しかし、一番復元したい画像ファイル(jpeg形式)が復元できません、同時期に同じく削除したファイルは無事に取り出せたのですが肝心のファイルは取り出せません。指定するファイル名、フォルダ名などの間違いはないのですが何が原因で復元できないのか理解できません。

良きアドバイスをいただければ助かります。
宜しくお願いいたします。

Aベストアンサー

こういったファイル復元ソフトを利用してファイルを復活させます。

●FileRecovery(フリーウェア)

消去・欠損したファイルを復元するソフト。
http://www.pcinspector.de/download.htm

●復元(フリーウェア)
http://www.vector.co.jp/soft/win95/util/se192983.html

■FINALDATA(ファイナルデータ)フォトリカバリー3.0(有料)
http://www.finaldata.ne.jp/f_8_3.html

当然ながら復元できる確立は有料ソフトのほうが高いです。

これらを使っても復元できない場合はファイルが上書きされて完全に消えている可能性が高いです。

Qlinuxコマンド mkdirでディレクトリを作成したのにディレクトリではありませんとエラーが

mkdir ○○
でディレクトリを作成したのにも関わらず、そのディレクトリにコピーしようとしたところ
cp: 宛先の `○○' はディレクトリではありません とエラーが出ました。

cp `find . -name "[ab]*" -print` ○○

同じディレクトリにある△△と○○という2つのディレクトリのうち△△に移動して△△の中のファイルを○○のファイルにコピーするといったものです。

Aベストアンサー

》△△と○○という2つのディレクトリのうち△△に移動して△△の中のファイルを○○のファイルにコピーするといったものです。

ということは、現在△△にいるわけだから、○○にコピーするためには、
cp `find . -name "[ab]*" -print` ../○○
とするか、もしくは○○はフルパスにする必要がありますが、そうしてますか?

Q「ウイルス感染ファイル」削除後のシステム復元でどうなる?

ウイルスバスターで幾つかのウイルス感染ファイル発見し全て削除しましたが、感染したファイルはシステムファイルでしたので少し心配でしたが削除しました。
そこで教えて頂きたいのですが、感染した日付以前でシステムの復元をする事によって削除されたシステムファイルは復元できるのでしょうか?一度削除されたシステムファイルはシステムの復元をしても二度と復元しないのでしょうか?

Aベストアンサー

以下WindowsXPという前提で・・・

>システムファイルでしたので少し心配でしたが削除しました。
通常、このままではシステムエラーが発生します。
しかし、Windowsには自動復旧機能があり、削除されたファイルをハードディスク上にあるCabファイルから呼び出して復旧させるようになっています。
従って、殆どの場合、削除されたシステムファイルを手動でインストールする必要はありません。

☆SFCの実行
もしシステムエラーが出る場合SFC(System File Checker)の実行をお勧めします。

1.CDドライブにOSのインストールディスクを入れておく。
2.「スタート」「コマンドプロンプト」または「ファイル名を指定して実行」で
「sfc /scannow」と入力して「OK」

「Windows XP professional のディスクを入れてください」という表示が出ることがありますがHome Editionであれば「無視」を選んでスキップしてください

>感染した日付以前でシステムの復元をする事によって削除されたシステムファイルは復元できるのでしょうか?
出来ないことはないでしょうが、あまりお勧めできません。
現在の状態が正常でない。
過去の状態の方が快適に操作できる。
という場合、それがいいかもしれません。
しかし、Windowsの設定というのは非常に広範囲にわたっており、現在と過去を比較して、どちらが適正かを判断するのは容易ではありません。
また、過去の復元ポイントの中には不正な設定が含まれている場合があり、間違って、そのポイントを選択することもあります。
ウィルス対策ソフトのサイトでは一旦復元設定を無効にして、過去の復元ポイントを全て消去することを推奨しています。

>一度削除されたシステムファイルはシステムの復元をしても二度と復元しないのでしょうか?
間違った操作をすると汚染されたファイルが復元されてしまいます。
一旦復元設定を無効にして、過去の復元ポイントを全て消去することで汚染されたファイルは二度と復元しません。

以下WindowsXPという前提で・・・

>システムファイルでしたので少し心配でしたが削除しました。
通常、このままではシステムエラーが発生します。
しかし、Windowsには自動復旧機能があり、削除されたファイルをハードディスク上にあるCabファイルから呼び出して復旧させるようになっています。
従って、殆どの場合、削除されたシステムファイルを手動でインストールする必要はありません。

☆SFCの実行
もしシステムエラーが出る場合SFC(System File Checker)の実行をお勧めします。

1.CDドライ...続きを読む

QLinuxでuseraddコマンドでユーザを作成

したときにそのユーザのパスワードは何になるのでしょうか?
すぐにpasswdコマンドでパスワードを登録するのが普通ですが
もしpasswdコマンドしなければ
そのユーザのパスワードは何になるのでしょうか?

Aベストアンサー

> これはパスワードが空でないと言うことにはならないでしょうか?

/etc/shadowを見ると、作りたてのuserに相当するパスワード欄は「!」1字になっています。
パスワードは空ではないけどlongin出来ない状態をこうして作っているのだと思います。

Q復元ソフトのふと感じた疑問 -ファイル名を削除したい-

先日、復元ソフトを使用していたときに感じたことなのですが
(使用ソフトは「復元」です。)
ファイルを復元する際の手順で削除したファイルが検索できますよね。
このファイル検索の時に、HITしないようにファイル名を完全に削除したい場合はどのようにすればいいのでしょうか??

例えば、「●●との秘密旅行001.jpg」のファイルを削除したとします。
その後、復元ソフトで検索をかけるとファイルを復元しなくてもファイル名を見ただけで怪しいファイルとわかってしまいますよね。
復元ソフトの検索で、表示されなくする方法か、別名に変える方法があるのなら教えてください。

Aベストアンサー

95159さんが求めていらっしゃるのは以下の方法ではないでしょうか。

フリーの復元ソフトに「DataRecovery」というものがあります。このフリーソフトには「削除したファイル」の名前を時間をかけず簡単に消去できる機能が付いています。

『DataRecovery』
http://www.vector.co.jp/soft/win95/util/se382922.html

■使い方
起動させる→該当ドライブをクリック→[スキャン]ボタンをクリック→削除したファイルの表示完了→「目的のファイルが見つかりましたか?」と出てきたら[キャンセル]をクリック→名前を消去したいファイルをクリックするか、名前を消去したい複数ファイルを左クリックしながら選択する→[消去]ボタンをクリック→[OK]をクリック

これで、名前を消せます。しかしながら完璧ではなくて、一部消せないこともあります。
(「DataRecovery」を再起動してもう一度ドライブをスキャンすると消せなかったファイルが表示されます)

参考URL:http://www.vector.co.jp/soft/win95/util/se382922.html

95159さんが求めていらっしゃるのは以下の方法ではないでしょうか。

フリーの復元ソフトに「DataRecovery」というものがあります。このフリーソフトには「削除したファイル」の名前を時間をかけず簡単に消去できる機能が付いています。

『DataRecovery』
http://www.vector.co.jp/soft/win95/util/se382922.html

■使い方
起動させる→該当ドライブをクリック→[スキャン]ボタンをクリック→削除したファイルの表示完了→「目的のファイルが見つかりましたか?」と出てきたら[キャンセル]をクリック→名...続きを読む

QLinux:sedコマンドで置換がしたいです!!

sedコマンドで、「$」、「空白」、「"」を含む文字を置換がしたいのですが、
うまく行きません ><
詳しい方いましたら教えてください m(_ _)m


******************************
置き換え対象の文字列(スペース含む)
******************************
$SUBJECT_TAG_TYPE = "[:]";


***********************
こんな風に置き換えたい
***********************
$SUBJECT_TAG_TYPE = "";


***********************
打ってみたコマンド
***********************
sed -i -e 's/$SUBJECT_TAG_TYPE = "[:]";/$SUBJECT_TAG_TYPE = "";/' ./test.txt

sedコマンドで、「$」、「空白」、「"」を含む文字を置換がしたいのですが、
うまく行きません ><
詳しい方いましたら教えてください m(_ _)m


******************************
置き換え対象の文字列(スペース含む)
******************************
$SUBJECT_TAG_TYPE = "[:]";


***********************
こんな風に置き換えたい
***********************
$SUBJECT_TAG_TYPE = "";


***********************
打ってみたコマンド
***********************
...続きを読む

Aベストアンサー

鍵括弧[] と、ドル記号$ は、
sed の コマンド s/// にて特別な意味を持つ記号です。

なので、エスケープして使いましょう
sed -e 's/\$SUBJECT_TAG_TYPE = "\[:\]";/\$SUBJECT_TAG_TYPE = "";/'

空白と二重引用符には、
特別な意味は無いのでそのままでよいのですが、
エスケープしてもしなくても意味は同じになるので、
怪しいと思った記号は全てエスケープするとよいでしょう。

少々見づらくなる欠点もありますが
sed -e 's/\$SUBJECT_TAG_TYPE\ \=\ \"\[\:\]\"\;/\$SUBJECT_TAG_TYPE\ \=\ \"\"\;/'


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング