문제

파일 경로를 입력으로 취하는 쉘 스크립트를 작성하고 있습니다.

이러한 이유로 전체 경로가있는 재귀 파일 목록을 생성해야합니다. 예를 들어 파일입니다 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}'
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top