Programing

ls 명령 : 파일 당 한 줄씩 재귀 전체 경로 목록을 얻는 방법은 무엇입니까?

lottogame 2020. 2. 17. 22:08
반응형

ls 명령 : 파일 당 한 줄씩 재귀 전체 경로 목록을 얻는 방법은 무엇입니까?


반복적 인 한 줄당 경로의 평평한 목록을 추출하려면 어떻게해야합니까?

예를 들어, 전체 경로를 가진 플랫 파일 목록을 원합니다.

/home/dreftymac/.
/home/dreftymac/foo.txt
/home/dreftymac/bar.txt
/home/dreftymac/stackoverflow
/home/dreftymac/stackoverflow/alpha.txt
/home/dreftymac/stackoverflow/bravo.txt
/home/dreftymac/stackoverflow/charlie.txt

ls -a1 거의 필요한 것을 수행하지만 경로 조각을 원하지 않고 전체 경로를 원합니다.


정말로를 사용하려면 lsawk를 사용하여 출력 형식을 지정하십시오.

ls -R /path | awk '
/:$/&&f{s=$0;f=0}
/:$/&&!f{sub(/:$/,"");s=$0;f=1;next}
NF&&f{ print s"/"$0 }'

찾기 사용 :

find .
find /home/dreftymac

파일 만 원하는 경우 (디렉토리, 장치 등 생략) :

find . -type f
find /home/dreftymac -type f

ls -ld $(find .)

수정 시간별로 출력을 정렬하려면 다음을 수행하십시오.

ls -ltd $(find .)


다음과 같은 간단한 방법을 시도하십시오.

find "$PWD"

가장 좋은 명령은 다음과 같습니다. tree -fi

링크를 사용하지 않고 파일을 사용하려면 >출력에서 제거 해야합니다.

tree -fi |grep -v \>

각 파일의 특성을 알고 싶다면 (예를 들어 ASCII 파일 만 읽으려면) 두 개의 whiles를 사용하십시오.

tree -fi | \
grep -v \> | \
while read first ; do 
    file ${first}
done | \
while read second; do 
    echo ${second} | grep ASCII
done

오, 정말 긴 답변 목록입니다. 그것은 많은 도움이되었고 마침내 내가 찾고있는 내 자신을 만들었습니다.

디렉토리 및 해당 서브 디렉토리의 모든 파일을 나열하려면 다음을 수행하십시오.

find "$PWD" -type f

디렉토리 및 해당 서브 디렉토리의 모든 디렉토리를 나열하려면 다음을 수행하십시오.

find "$PWD" -type d

디렉토리 및 하위 디렉토리에있는 모든 디렉토리 및 파일을 나열하려면

find "$PWD"

나는 전체 경로를 모르지만 -R재귀에 사용할 수 있습니다 . 또는에 구부러지지 않은 경우 할 ls수 있습니다 find *.


ls 이외의 외부 명령을 사용하지 않는 경우

ls -R1 /path | 
  while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done


du -a

찾기 / 위치를 찾을 수없는 일부 제한된 기기 쉘에 유용합니다.


찾기 / 트릭을 할 것입니다


평평한 목록을 얻는 가장 좋은 방법은 다음과 같습니다.

find -D tree /fullpath/to-dir/ 

(또는 txt 파일로 저장하기 위해)

find -D tree /fullpath/to-dir/ > file.txt

복잡하게 만들지 마십시오. 방금 이것을 사용하고 아름다운 결과를 얻었습니다.

ls -lR /path/I/need

미래의 모든 사람들에게 가장 쉬운 방법은 다음과 같습니다.

du

그러나 각 폴더에 포함 된 내용의 크기도 표시됩니다. awk를 사용하여 폴더 이름 만 출력 할 수 있습니다.

du | awk '{print $2}'

편집-미안, 내 나쁜. 폴더 만 필요하다고 생각했습니다. 미래의 누군가가 어쨌든 필요할 때를 대비하여 여기에 남겨 두십시오 ...


가능한 모든 ls 옵션을 자유롭게 사용할 수 있습니다.

find -type f | xargs ls -1


다음 형식으로 bash 명령을 실행하십시오.

find /path -type f -exec ls -l \{\} \;

다음은 디렉토리 이름을 보여주는 부분 답변입니다.

ls -mR * | sed -n 's/://p'

설명:

ls -mR * ':'로 끝나는 전체 디렉토리 이름을 나열한 다음 해당 디렉토리의 파일을 개별적으로 나열합니다.

sed -n 's/://p' 콜론으로 끝나는 라인을 찾고 콜론을 제거하고 라인을 인쇄합니다

디렉토리 목록을 반복함으로써 디렉토리도 찾을 수 있어야합니다. 여전히 작업 중입니다. xargs를 통해 와일드 카드를 얻는 것은 어려운 일입니다.


ls 디렉토리 끝에 와일드 카드를 추가하면 전체 경로가 적용됩니다. 지금 당신은 이것을 가지고 있습니다 :

$ ls /home/dreftymac/
foo.txt
bar.txt
stackoverflow
stackoverflow/alpha.txt
stackoverflow/bravo.txt
stackoverflow/charlie.txt

대신이 작업을 수행 할 수 있습니다.

$ ls /home/dreftymac/*
/home/dreftymac/.
/home/dreftymac/foo.txt
/home/dreftymac/bar.txt
/home/dreftymac/stackoverflow:
alpha.txt
bravo.txt
charlie.txt

불행히도 이것은 재귀 디렉토리의 전체 경로를 인쇄하지 않으므로 찾고있는 전체 솔루션이 아닐 수도 있습니다.


ls -lR당신이 찾고 있던 것, 또는 내가 최소한이었습니다. 건배


내가 보는 많은 답변. 이것은 내 것이며, Mac에서 작업하는 경우 매우 유용하다고 생각합니다.

"번들"파일 ( .app , .rtfd , .workflow 등) 이 있다는 것을 확신합니다 . 그리고 Finder의 창을 보면 단일 파일처럼 보입니다. 그러나 그들은 아닙니다. 그리고 $ ls또는 $ find디렉토리로 볼 ... 그래서를, 당신은뿐만 아니라 자신의 내용을 나열 필요하지 않는 한, 나를 위해이 작품 :

find . -not -name ".*" -not -name "." | egrep -v "\.rtfd/|\.app/|\.lpdf/|\.workflow/"

물론 이것은 작업 디렉토리에 대한 것이며 다른 번들의 확장명을 추가 할 수는 있지만 항상 /뒤에 추가하십시오 . 또는가없는 번들 인 경우 다른 확장 프로그램 /입니다.

오히려 " .lpdf/"(다국어 pdf)가 흥미 롭습니다 . .pdfFinder 에는 보통 " "확장자 (!!)가 없거나 없습니다. 이 방법으로 당신은 이것을 위해 (또는 단지 1 개의 파일을 계산합니다) pdf많은 것들이 아닙니다 ...


디렉토리가 상대 경로로 전달 된 경우 find를 호출하기 전에 디렉토리를 절대 경로로 변환해야합니다. 다음 예제에서 디렉토리는 스크립트에 첫 번째 매개 변수로 전달됩니다.

#!/bin/bash

# get absolute path
directory=`cd $1; pwd`
# print out list of files and directories
find $directory

tar cf - $PWD|tar tvf -             

느리지 만 재귀 적으로 작동하며 디렉토리와 파일을 모두 인쇄합니다. 다른 모든 정보 / 디렉토리없이 파일 이름을 원하면 awk / grep으로 파이프 할 수 있습니다.

tar cf - $PWD|tar tvf -|awk '{print $6}'|grep -v "/$"          

@ ghostdog74 : 솔루션에 약간의 조정.
다음 코드는 전체 절대 경로로 파일을 검색하는 데 사용할 수 있습니다.

sudo ls -R / | awk '<br/>
/:$/&&f{s=$0;f=0}<br/>
/:$/&&!f{sub(/:$/,"");s=$0;f=1;next}<br/>
NF&&f{ print s"/"$0 }' | grep [file_to_search]

파일 이름을 알고 있었지만 디렉토리도 원했습니다.

$ PWD 찾기 | fgrep 파일 이름

Mac OS 10.12.1에서 완벽하게 작동

참고 URL : https://stackoverflow.com/questions/1767384/ls-command-how-can-i-get-a-recursive-full-path-listing-one-line-per-file

반응형