각 폴더의 내용과 폴더 자체의 이름을 보고하는 파일이 필요합니다. 만약 내가한다면
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/c
find
-mindepth 2 -maxdepth 2
답변4
어때? . .
find `pwd` -type f | perl -lane '@x=split(/\//); print "$x[$#x-1]: $x[$#x]";'