아래와 같이 각각의 절대 경로를 사용하여 폴더의 모든 파일을 한 줄씩 나열하고 싶습니다.
filename1 /home/.../file1
filename2 /home/.../file2
filename3 /home/.../file3
시도했지만 find $(pwd) -type f
경로만 제공합니다.
답변1
GNU 사용 find
:
find "$PWD" -type f -printf '%f %h/%f\n'
%f
모든 선행 디렉터리 파일 이름을 제거합니다(마지막 요소만).%h
파일 이름의 선행 디렉터리(마지막 요소를 제외한 모든 요소) 파일 이름에 슬래시가 포함되어 있지 않으면(현재 디렉터리에 있기 때문에) %h 지정자는 "."으로 확장됩니다.
답변2
표준 find
:
find "$PWD" -type f -exec sh -c '
for pathname do
printf "%s\t%s\n" "${pathname##*/}" "$pathname"
done' sh {} +
그러면 현재 디렉터리 안이나 아래에 있는 모든 파일이 탭으로 구분된 목록이 인쇄됩니다. 첫 번째 열에는 파일의 파일 이름이 포함되고 두 번째 열에는 $PWD
현재 디렉터리(검색 경로의 절대 경로)를 기준으로 한 파일의 경로 이름이 포함됩니다.
이는 발견된 경로 이름을 선호하는 형식으로 간단히 이름을 출력하는 짧은 인라인 스크립트에 일괄 공급하여 수행됩니다. 매개변수 교체는 ${pathname##*/}
해당 값으로 확장되고 $pathname
마지막 값 이전의 모든 항목을 제거합니다 /
.
개행 문자가 포함된 파일 이름은 여러 줄에 나타나며 탭이 포함된 파일 이름을 올바르게 구별하기가 어렵습니다. 결과가 구문 분석이 아닌 보기용이라고 가정하면 아마도 괜찮을 것입니다.
답변3
안녕하세요, 감사합니다언급하다fselect
!
이상한 파일 이름 문제는 새로운 것이 아닌 것 같습니다. 파일 이름과 경로가 같은 줄에 있는지(그 안에 포함되어 있는지)조차 알 수 없습니다 \n
. 이러한 문제를 해결하려면 fselect
지원INTO
옵션.
가장 간단한 변형은 INTO LIST
추가 구문 분석을 위한 것입니다 xargs
. INTO JSON
보다 정교한 처리에 관심이 있을 수 있습니다.
답변4
그리고 zsh
:
for f (**/*(DN)) print -r -- $f $f:P
$f:P
realpath()
파일에 대한 표준 절대 경로로 확장하는 것과 같습니다 (경로 구성 요소의 모든 기호 링크를 대상으로 반복적으로 확장).