
こんにちは
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日がないなど)
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
ファイルの日付を取得するには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の部分のカラムの位置等は実際に確認をしてから適宜変更する必要があります。
以上、ご参考まで。
ありがとうございます。
awk で欲しい情報が取得できました。
助かります。
基礎をやらないとダメだと痛感し、ちょっと厚めの自習本を買いました。
No.4
- 回答日時:
そもそも、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/月/`
です。
No.2
- 回答日時:
実際にやってはいませんが…まぁ、目安として。
>1. ファイルの作成日を調べる
statコマンドで-cオプション付で指定したらよいかと。
作成日がどれにあたるのかは不明ですが。
# ModifyなのかChangeなのか…。
http://linuxjm.sourceforge.jp/html/GNU_coreutils …
%W辺りですかねぇ…。
で、UNIX TIMEなどで取得してdataコマンドで書式化してください。
>2. その作成日のフォルダがあれば調べる(なければ新規作成する)
testコマンドで有無の確認は可能かと。
# 「シェルスクリプト ディレクトリ 存在確認」辺りで検索すればそれなりに見つかるものと思われます。
ファイルの移動はmvコマンドで可能でしょう。
>3. 次のファイルをチェックする、以下ループ
普通にシェルスクリプトでループですかね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【マクロ】ファイル名の日付によって、保管するフォルダを、自動選択したい 4 2023/08/16 11:24
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) 【マクロ】エラーが発生⇒実行時エラー58既に同名のファイルが存在 5 2022/08/31 10:03
- Excel(エクセル) excel 別のフォルダから列コピーする方法 8 2022/12/17 16:24
- その他(プログラミング・Web制作) セレクトボックスで選択された値をコントローラーで使用したい 2 2022/07/26 16:41
- Windows 10 ショートカットの作り方と使い方について教えて下さい。 3 2022/05/27 08:44
- Visual Basic(VBA) エクセルのマクロについて教えてください 物件ごとのフォルダを作成してます そのフォルダ内にサブフォル 2 2023/07/02 17:58
- Excel(エクセル) 2つのマクロを連続して動かしたい 3 2022/09/20 23:46
- Excel(エクセル) ファイル一覧表を使ったファイルの移動 5 2022/08/10 15:37
- その他(OS) DOSコマンド『dir』の『/o』オプション 3 2023/03/10 09:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Core 2 Duo の古いパソコンに最...
-
LinuxでWine使うとどのくらいWi...
-
ubuntu(linux)のシャットダウン...
-
CentOSが起動時にフリーズ
-
2TBのUSBメモリを2000円ほどで...
-
至急です。kubuntu24.04ltsをUS...
-
ubuntuで デイスク/deb/loopと...
-
mxlinux 起動時エラーについて
-
[Linux Mint] インストールした...
-
apacheでリバースプロキシを設...
-
zorin OS
-
ubuntu 24 へのCanon 複合機ス...
-
tarで纏める際に、複数場外した...
-
Fedoraのupgradeで、libruby.so...
-
次のif文について意味を教えて...
-
windowsxpと同じくらい軽いLinu...
-
WineのRufusでデバイスを検知す...
-
LinuxのノートパソコンでDVDコ...
-
raspberryPi で、iPhoneの再生/...
-
windows10を使っています。 wsl...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
LinuxでWine使うとどのくらいWi...
-
Core 2 Duo の古いパソコンに最...
-
Linux のシェルスクリプトの強...
-
ubuntu(linux)のシャットダウン...
-
bashでシングルクォート内の変...
-
ubuntuで デイスク/deb/loopと...
-
apacheでリバースプロキシを設...
-
CentOSが起動時にフリーズ
-
ubuntuのシャットダウンが進ま...
-
ubuntu が起動しない。
-
Windowsのローカルディレクトリ...
-
Ububtuでファイル共有できない...
-
Ubuntu on Xorgのログインについて
-
ログにserver reached MaxReque...
-
「/var/log」内のログの削除の...
-
ubuntu 24 へのCanon 複合機ス...
-
ssl_request_logの必要性について
-
私のパソコンでVirtualBoxは使...
-
WineのRufusでデバイスを検知す...
-
LinuxのノートパソコンでDVDコ...
おすすめ情報