Linux에서 절대 경로가있는 파일 목록을 어떻게 생성 할 수 있습니까?
-
05-07-2019 - |
문제
파일 경로를 입력으로 취하는 쉘 스크립트를 작성하고 있습니다.
이러한 이유로 전체 경로가있는 재귀 파일 목록을 생성해야합니다. 예를 들어 파일입니다 bar
경로가 있습니다 :
/home/ken/foo/bar
하지만 내가 볼 수있는 한, 둘 다 ls
그리고 find
상대 경로 목록 만 제공합니다.
./foo/bar (from the folder ken)
그것은 명백한 요구 사항처럼 보이지만 나는 아무것도 볼 수 없습니다. find
또는 ls
남자 페이지.
절대 경로를 포함하여 쉘에서 파일 목록을 어떻게 생성 할 수 있습니까?
해결책
당신이 주면 find
시작하는 절대 경로는 절대 경로를 인쇄합니다. 예를 들어, 현재 디렉토리에서 모든 .htaccess 파일을 찾으려면 다음과 같습니다.
find "$(pwd)" -name .htaccess
또는 쉘이 팽창하는 경우 $PWD
현재 디렉토리로 :
find "$PWD" -name .htaccess
find
단순히 그 경로에서 파일에 대한 상대 경로로 주어진 경로를 단순히 준비합니다.
그렉 휴길 또한 사용을 제안했습니다 pwd -P
현재 디렉토리에서 Symlinks를 해결하려면
다른 팁
readlink -f filename
완전한 절대 경로를 제공합니다. 그러나 파일이 Symlink 인 경우 최종 해결 된 이름을 얻을 수 있습니다.
DIRS (the /
~ 후에 **
디렉토리로 제한하려면 Bash에서 필요합니다) :
ls -d -1 "$PWD/"**/
현재 디렉토리 바로 아래 파일 및 디렉토리에 대한 이름은 다음과 같습니다. .
:
ls -d -1 "$PWD/"*.*
이것은 모든 것을 위해 :
ls -d -1 "$PWD/"**/*
여기에서 가져 왔습니다 http://www.zsh.org/mla/users/2002/msg00033.html
Bash에서 **
당신이 활성화하면 재귀 적입니다 shopt -s globstar
.
당신이 사용할 수있는
find $PWD
Bash에서
ls -d "$PWD/"*
이것은 만 보입니다 현재의 예배 규칙서. 공백이 포함 된 경우 "$ pwd"를 인용합니다.
그만큼 $PWD
위의 Matthew의 좋은 선택입니다. 파일 만 인쇄하려면 -type F 옵션을 추가하여 일반 파일 만 검색 할 수도 있습니다. 다른 옵션은 디렉토리의 경우에만 "D"입니다. 따라서 귀하의 경우 (.C Ext가있는 파일 만 검색하려는 경우) : 다음과 같습니다.
find $PWD -type f -name "*.c"
또는 모든 파일을 원하는 경우 :
find $PWD -type f
참고 : 위의 명령에 대한 별칭을 만들 수 없습니다. $ pwd가 bash에 의해 별칭을 설정할 때 홈 디렉토리에 자동 완성되기 때문에.
Find 명령에 절대 경로를 주면 절대 경로로 결과를 뱉어냅니다. 따라서 입력하려면 Ken Directory에서 :
find /home/ken/foo/ -name bar -print
(상대 경로 대신 find . -name bar -print
)
당신은 얻어야합니다 :
/home/ken/foo/bar
그러므로 당신이 원한다면 ls -l
그리고 절대 경로를 반환하도록하십시오. ls -l
그것이 찾은 모든 것에.
find /home/ken/foo -name bar -exec ls -l {} ;\
참고 : 사이에 공간이 있습니다 {}
그리고 ;
당신은 다음과 같은 것을 얻을 것입니다 :
-rw-r--r-- 1 ken admin 181 Jan 27 15:49 /home/ken/foo/bar
파일의 위치가 확실하지 않은 경우 항상 검색 위치를 변경할 수 있습니다. 검색 경로가 "/"로 시작하는 한, 당신은 대가로 절대적인 경로를 얻게됩니다. 많은 권한이 거부 된 오류를 얻을 위치 ( /)를 검색하는 경우 표준 오류 리디렉션을 권장하여 실제로 찾은 결과를 볼 수 있습니다.
find / -name bar -exec ls -l {} ;\ 2> /dev/null
(2>
Borne과 Bash Shells의 구문이지만 C 쉘과 함께 작동하지 않습니다. 그것은 다른 껍질에서도 작동 할 수 있지만, 나는 그것이 Bourne과 Bash에서 작동한다는 것을 확실히 알고 있습니다).
명령: ls -1 -d "$PWD/"*
이것은 아래와 같은 파일의 절대 경로를 제공합니다.
[root@kubenode1 ssl]# ls -1 -d "$PWD/"*
/etc/kubernetes/folder/file-test-config.txt
/etc/kubernetes/folder/file-test.txt
/etc/kubernetes/folder/file-client.txt
lspwd() { for i in $@; do ls -d -1 $PWD/$i; done }
다음은 여분의 기간없이 목록을 인쇄하고 파일 일치를 검색하는 방법을 보여주는 예입니다. 도움이 되었기를 바랍니다:
find . -type f -name "extr*" -exec echo `pwd`/{} \; | sed "s|\./||"
find / -print
이것을 할 것입니다
ls -1 | awk -vpath=$PWD/ '{print path$1}'