各フォルダの内容とフォルダ自体の名前を報告するファイルが必要です。もし私がするなら
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/c
find
-mindepth 2 -maxdepth 2
答え4
どうですか? 。 。
find `pwd` -type f | perl -lane '@x=split(/\//); print "$x[$#x-1]: $x[$#x]";'