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で質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- UNIX・Linux ブレース展開の使い方での質問です 2 2023/07/15 16:06
- その他(プログラミング・Web制作) 図に示す階層構造で,現在のディレクトリ(カレントディレクトリという)が*印のディレクトリであるとき, 2 2022/11/16 10:55
- UNIX・Linux JSLinuxについて。 Linuxのこの手順のプログラミングは合っているでしょうか。 ①ホームディ 2 2022/06/20 15:33
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- サーバー 別サーバに構築したApache+Tomcatの連携について 2 2023/03/06 23:23
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- UNIX・Linux Linuxについて質問です。 シェルスクリプト名をfind.shとして、以下の条件をすべて満たすファ 1 2023/02/03 03:50
- PHP ファイルアップロードに関してのセキュリティについてアドバイスお願い致します 1 2023/08/20 00:25
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
ttlで戻り値を取得する方法
その他(プログラミング・Web制作)
-
明休とは何ですか?
その他(教育・科学・学問)
-
エクセルで作った新しいウインドウを削除するには・・・
Excel(エクセル)
-
-
4
CLOB型へのINSERT
Oracle
-
5
Proxy Errorってどう対処したら良いんですか?
その他(インターネット接続・インフラ)
-
6
tarコマンドのエラーについて
UNIX・Linux
-
7
Bシェル 変数にある文字列が含まれているか調べる方法
その他(コンピューター・テクノロジー)
-
8
シェルのcase文で正規表現を使って1~99までだったらというようにしたい
その他(プログラミング・Web制作)
-
9
sqlplusでヘッダーが付かない
Oracle
-
10
bashの関数の引数にスペースが入るとズレる件
その他(プログラミング・Web制作)
-
11
Linux環境 grepで改行コード(CRLF、LF)を検索できないで
UNIX・Linux
-
12
複数の文字列のいずれかが含まれていたらTRUEを返す関数について
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
シェルスクリプトでエラーが出ます
-
コマンドプロンプト net user...
-
○行目から□行目だけを表示する...
-
【DOSコマンド】for文の中で変...
-
ファイルの先頭に文字を追加す...
-
スラッシュ"/"を削除したい
-
renameコマンドでファイル名か...
-
Windowsで定期的にUNIXへFTPす...
-
CentOS/リダイレクションに改行...
-
^M削除方法、教えてください。
-
SONYの音楽ソフト「x-アプリ」...
-
TOPコマンドで表示するCPU使用...
-
Dirコマンドでフォルダ内ファイ...
-
エクセルの表にヘンな枠が・・・
-
スクリプトのエラー「unexpecte...
-
テキストファイルから最終行の抽出
-
batである文字列内に特定の文字...
-
Linux環境 grepで改行コード(CR...
-
プロセス、サービス、デーモン...
-
ラズパイで『’test.service’をs...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
シェルスクリプトでエラーが出ます
-
バッチで特定文字が含まれる先...
-
【Linux】findコマンドの表示順
-
Linuxで*をつかってファイル移...
-
【DOSコマンド】for文の中で変...
-
renameコマンドでファイル名か...
-
*.txtファイルの最終行だけ参照...
-
スラッシュ"/"を削除したい
-
CentOS/リダイレクションに改行...
-
UNIXで、ディレクトリを比較し...
-
DOSでテキストファイルの中のあ...
-
ファイルの先頭に文字を追加す...
-
○行目から□行目だけを表示する...
-
標準出力とリダイレクトを同時...
-
OSXで常に最後に表示される文字...
-
sedで置換した値を変数にセット...
-
windows7でmingwのgrepで漢字の...
-
コマンドプロンプト net user...
-
Windowsコマンドラインで文字列...
-
ファイルリストを印刷したい。
おすすめ情報