
linuxのfindコマンドについて質問です。
例えば、あるディレクトリの構成が以下の通りだったとします。
/dir1/aaa.txt
/dir1/zzz.txt
/dir1/dir2/bbb.txt
このとき、
find *.txt | sort を行うと
/dir1/aaa.txt
/dir1/dir2/bbb.txt
/dir1/zzz.txt
という順に表示されます。
(文字としてはソートされていますが、ディレクトリ構造としては滅茶苦茶です。)
しかし、ファイル名を表示する際は通常はディレクトリ毎に表示したいため、
1つ目の例の順のように表示される必要があります。
このとき、どのようにすればfindによる検索結果を1つ目のようにディレクトリ順に表示できるのでしょうか。
実際はディレクトリ構成が複雑で、ファイルもディレクトリも非常に多くあります。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
きゅうきょ作成したので、自信がありませんが、
for f in `find . -type d`
do
find $f -maxdepth 1 -mindepth 1 -name "*.txt" | sort
done
では...
No.4
- 回答日時:
find結果の文字列は、単なる文字列ですのでディレクトリ構造を持っていません。
したがって、得られた文字列から「/」をデリミッタ文字として「/」の出現回数を計算して、この回数をsortパラメータに含ませればいいでしょう。
つまり、findやsortなどのコマンドだけではムリでしょう。
> このとき、find *.txt | sort を行うと・・・。
これではサブディレクトリまで検出できないのでは?。
カレントディレクトリをfindでサブディレクトリまで検索するには下記のようになるのではありませんか?
ただし、下記の結果は単なる文字列sortです。
find -D tree | grep .txt | sort
No.3
- 回答日時:
同じ階層のファイルを先にディレクトリを後にしたいと言うことですか?
find *.txt と書かれてますが、これは、find -name "*.txt" の間違いですよね。
ディレクトリ名の前にソート順が遅くなるように ~~ とかをつけて、
find -name "*.txt" | sed -e 's:/:/~~:g' -e 's:/~~\([^/]*\)$:/\1:' | sort | sed 's:/~~:/:
~~で始まるファイル名がそもそもあるなら修正が必要です。
この回答への補足
ありがとうございます。これで希望の処理ができました。
調べながら意味を解読していますが、ここで使用されているコロンにはどういう意味があるのでしょうか。
通常の置換では s/aaa/bbb/g のような記法になると思いますが、コロンが入ることによって何が起こっているのでしょうか?
No.2
- 回答日時:
#1です。
書き忘れてましたが、
find *.txt
のような使い方のfindはlinuxにはなかったと思いますが。
/ を基準にして *.txt にマッチするファイルのパスを出力するなら
find / -name '*.txt' -print
になります。
No.1
- 回答日時:
そのような出力順で出力したいのでしたら、ご自分でそのプログラムを作るしかないと思いますよ。
例にあげられてるディレクトリ構成は、あなた好みの出力順でしかなく、その好みを理解してソートしてくれるようなプログラムはありませんから。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
シェルスクリプトでエラーが出ます
-
trコマンドについて
-
UNIXで、ディレクトリを比較し...
-
Linuxで*をつかってファイル移...
-
DOSでテキストファイルの中のあ...
-
バッチで特定文字が含まれる先...
-
コマンドプロンプト net user...
-
標準出力とリダイレクトを同時...
-
unixのdiffコマンドの動作について
-
euctosj を使用してファイル名...
-
OSXで常に最後に表示される文字...
-
awkかsedで
-
Dirコマンドでフォルダ内ファイ...
-
Linux のシェルスクリプトの強...
-
batである文字列内に特定の文字...
-
エクセルの表にヘンな枠が・・・
-
pingは正常なのにtracerouteで...
-
TOPコマンドで表示するCPU使用...
-
ファイル名についている「-」と...
-
空きIPアドレスを探す方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
シェルスクリプトでエラーが出ます
-
【DOSコマンド】for文の中で変...
-
スラッシュ"/"を削除したい
-
renameコマンドでファイル名か...
-
UNIXで、ディレクトリを比較し...
-
バッチで特定文字が含まれる先...
-
【Linux】findコマンドの表示順
-
Linuxで*をつかってファイル移...
-
*.txtファイルの最終行だけ参照...
-
DOSでテキストファイルの中のあ...
-
OSXで常に最後に表示される文字...
-
BATファイルによるfcコマンドで...
-
○行目から□行目だけを表示する...
-
dosバッチを使用して昇順に
-
DOSバッチにて外のファイルの指...
-
unixのdiffコマンドの動作について
-
コマンドプロンプト net user...
-
ファイルの先頭に文字を追加す...
-
shellでsmbclientでファイル転送
-
行の挿入をおこなう。awk?
おすすめ情報