폴더 및 해당 내용 나열

폴더 및 해당 내용 나열

각 폴더의 내용과 폴더 자체의 이름을 보고하는 파일이 필요합니다. 만약 내가한다면

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 셸에서 작동합니다.

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]";' 

관련 정보