列出文件夹及其内容

列出文件夹及其内容

我需要一个文件来报告每个文件夹的内容和文件夹本身的名称。如果我做

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,第二个示例中是小写字母 L)。

答案2

这适用于任何 POSIX shell:

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不报告./a./a/b/c)。通过 GNU(和其他一些)find实现,您可以将其替换为-mindepth 2 -maxdepth 2.

答案4

怎么样 。 。 。

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

相关内容