フォルダとその内容を一覧表示

フォルダとその内容を一覧表示

各フォルダの内容とフォルダ自体の名前を報告するファイルが必要です。もし私がするなら

ls -l * 

(これは何百ものフォルダのほんの一部です)

secondary_endosymbiont_of_Heteropsylla_cubana_Thao2000_uid172738:
total 1232
-rw-r--r--  1 FrancescaDeFilippis  staff  627404  2 Nov  2012 NC_018420.ffn

syncytium_symbiont_of_Diaphorina_citri_uid213384:
total 896
-rw-r--r--  1 FrancescaDeFilippis  staff  446934 29 Lug  2013 NC_021885.ffn
-rw-r--r--  1 FrancescaDeFilippis  staff    5594 29 Lug  2013 NC_021886.ffn

uncultured_Sulfuricurvum_RIFRC_1_uid193658:
total 4840
-rw-r--r--  1 FrancescaDeFilippis  staff     1002  9 Apr  2013 NC_020503.ffn
-rw-r--r--  1 FrancescaDeFilippis  staff  2470123  9 Apr  2013 NC_020505.ffn

uncultured_Termite_group_1_bacterium_phylotype_Rs_D17_uid59059:
total 3392
-rw-r--r--  1 FrancescaDeFilippis  staff  851852  1 Mar  2013 NC_020419.ffn
-rw-r--r--  1 FrancescaDeFilippis  staff    6684  1 Mar  2013 NC_020420.ffn
-rw-r--r--  1 FrancescaDeFilippis  staff    3869  1 Mar  2013 NC_020421.ffn
-rw-r--r--  1 FrancescaDeFilippis  staff    2394  1 Mar  2013 NC_020422.ffn
-rw-r--r--  1 FrancescaDeFilippis  staff  848808 28 Ago  2012 NS_000191.ffn
-rw-r--r--  1 FrancescaDeFilippis  staff    6684 28 Ago  2012 NS_000192.ffn
-rw-r--r--  1 FrancescaDeFilippis  staff    3869 28 Ago  2012 NS_000193.ffn
-rw-r--r--  1 FrancescaDeFilippis  staff    2394 28 Ago  2012 NS_000194.ffn

私は次のようなものを得たいと思います:

secondary_endosymbiont_of_Heteropsylla_cubana_Thao2000_uid172738:  NC_018420.ffn

syncytium_symbiont_of_Diaphorina_citri_uid213384:  NC_021885.ffn
syncytium_symbiont_of_Diaphorina_citri_uid213384:  NC_021886.ffn

など。そのため、ファイルごとにフォルダ名を繰り返す必要があります。

これをどうやって得ることができますか?

答え1

find .

または

find . -ls

詳細については...

単一レベル(他のディレクトリー以外のファイルを含むディレクトリー)にはlsを使用してください。

ls -1d -- */*

簡単なリストの場合、

ls -ld -- */*

詳細(最初の例では数字1、2番目の例では小文字L)

答え2

これはすべてのPOSIXシェルで機能します。

find <directory> -type f -exec sh -c '
  for f do
    printf "%s: %s\n" "${f%/*}" "${f##*/}"
  done' sh {} +

このコマンドはファイル(変数に保存されたファイル名f)ごとに実行され、ディレクトリ(${f%/*})、コロン、ファイル名(${f##*/}')を表示します。

答え3

そしてzsh

for d (*(/N)) {for f ($d/*(N:t)) printf '%s:  %s\n' $d $f; echo}

隠しファイルの並べ替えや除外に興味がない場合、またはディレクトリ間に空白行がある場合(ファイル名に改行文字が含まれていないと仮定)、単に次のことができます。

find . -path './*/*' -prune -print | sed 's|\./||;s|/|:  |'

GNUを使用すると、find次のこともできます。

find . -path './*/*' -prune -printf '%P\n' | sed 's|/|:  |'

または:

find . -path './*/*' -prune -printf '%h:  %f\n'

あなたが率いることに興味がなければ./

-path './*/*' -prune深さ2のファイルのみが報告されます(またはは./a/b除く)。 GNU(および他の)実装では、これを 。./a./a/b/cfind-mindepth 2 -maxdepth 2

答え4

どうですか? 。 。

find `pwd` -type f | perl -lane '@x=split(/\//); print "$x[$#x-1]: $x[$#x]";' 

関連情報