2013-03-27 2 views
1

오히려 새로운 명령 줄, 그래서 나와 함께 곰.ls -d * /?의 출력을 올바르게 리디렉션하는 방법?

나는 숫자가 /usr/local 인 디렉토리를 찾는 것으로되어 있습니다. 나는 그냥 디렉토리 목록을 관리했습니다 :

ls -d */ 

을하지만 배관을 통해 아무것도를 사용하려고하면 표시에는 출력이

find -name 
grep 
look 

없습니다. 나는 검색을 위해 '*'와일드 카드를 사용해도 시도했지만, 아무 것도 나타나지 않습니다.

내가 잘못 가고있는 아이디어가 있습니까?

+0

정확히 무슨 짓을 당신의 커맨드 라인은 어떻게 생겼습니까? 'find -name'을 사용하여 stdinput을 필터링 할 수 없습니다. –

+0

가장 최근의 시도 : ls -d */| tr '/' ''| find -type d -name '*. [0-9]' – JZachow

+0

'find'는 표준 입력을 읽지 않습니다; 'ls -d ... | tr ...'은 그것과는 무관하다. 또한 검색 할 위치로 하나 이상의 이름이있는'find'를 제공해야합니다. '$ (cd/usr/local; ls -d */| tr '/' '') -type d -name '* [0-9]''를 사용하면 더 잘했을 것입니다. 좋은 해결책은 아니지만 대부분 효과가 있습니다. –

답변

1

find 명령은 당신이 원하는 것을 할 수 있어야하고, 그것의 모양에서 당신은 단지에 대한 권리를 가지고 이름을 가진 디렉토리를 찾습니다

find/-type d -name <directory_name> 

당신은 루트에서 지정 예배 규칙서. 위에 표시된 것처럼 명령을 실행 한 경우 검색을 시작할 디렉토리를 지정하지 않았다는 것이 결함이라고 생각합니다. 사용자가 지정하는 다른 매개 변수를해야하는 경우뿐만 아니라 매뉴얼 페이지를 사용할 수 있습니다

http://unixhelp.ed.ac.uk/CGI/man-cgi?find

+0

아, 죄송합니다. 나는 조금 불분명했다. 나는 하나의 특정 디렉토리를 찾고 있지 않다. 단지/usr/local에있는 숫자로 끝나는 디렉토리 중 하나만 찾고있다. – JZachow

+1

'/'를 주어진 디렉토리로 바꿀 수 있습니다./ 찾기/경로/to/some/dir/* [0-9] "-type d -maxdepth 1' – kjprice

+0

시험해보기 : find/usr/local -type d | sed의/[^ 0-9] * \ ([0-9] \ + \). */\ 1/ –

0
find "/path/to/some/dir/*[0-9]" -type d -maxdepth 1 
+0

여기에는 몇 가지 문제점이 있습니다. 쉘은''/ path/to/some/dir/* [0-9]''를 큰 따옴표로 인해 이름 목록으로 확장하지 않으므로 find는'no 그러한 파일 또는 디렉토리 '에 대한 것입니다. 여러분이 한 일을 성취하기 위해서는 질문의 이름 ('/ usr/local')을 사용하고'-name '* [0-9]' '를 필터 중 하나로 지정하십시오. 그렇다면 당신은 사업에 종사하고 있습니다. –

0
ls -l /path/to/some/dir | grep "^d" | awk '{print $9}' 
+0

(1) 일반적으로 답변은 하나만 있으면됩니다. 이 답변을 다른 답변의 대안으로 추가 할 수 있으며, 옵션을 선택하는 이유를 설명하는 설명이 함께 제공됩니다. (2) 디렉토리 이름에 공백이 있으면 문제가 발생합니다. (3) 디렉토리 이름이 숫자로 끝나지 않습니다. (4)이 질문은'/ usr/local'을 검색 할 디렉토리로줍니다; '/ path/to/some/dir' 대신에 이것을 사용할 수있었습니다. (5) 실제로는 3 개의 명령을 실행할 필요가 없습니다. –

0
for file in /path/to/some/dir/*; do \ 
    if [[ -d $file ]]; then \ 
     echo $file; \ 
    fi \ 
done 
+0

세 번째 대답은 ... 바빴습니다 ... 이것은 숫자로 끝나는 이름을 필터링하지 않습니다. 그 외에도 쉘의 고유 한 기능을 사용하여 이름을 생성하고 파일 유형을 테스트하는 것이 합리적으로 잘 수행됩니다. 백 슬래시는 필요하지 않습니다. C 쉘은 역 슬래시를 추가하여 알려주지 않으면 계속할시기를 알 수 없습니다. 서면으로, 하나의 세미콜론은 불필요합니다,하지만 그것은 아주 사소한 것입니다 (그래서, 한 수준에서 백 슬래시 - 그들은 좋지는 않지만 아무런 해가 없습니다). –

0
find /usr/local -type d -name '*[0-9]' 

이 하나에 모든 것을 않습니다; 이름이 숫자로 끝나는 디렉토리에 대해 /usr/local/을보고 (암시 적으로 결과를 인쇄합니다).

에 코드를 같이해야 할 수도 있습니다 ls 사용 : 다음에 숫자가 어디이 이름의 끝에 슬래시로 디렉토리를 나열합니다, 그래서 당신이 이름을 검색 할 필요가

cd /usr/local || exit 1 
ls -d */ | grep '[0-9]/$' 

슬래시와 이름의 끝. 이 명령과 find 명령의 한 가지 차이점은 에 바로 ls 디렉터리 만 나열하고 find은 디렉터리 계층 구조를 검색한다는 것입니다. 계층 구조를 검색 find을하지 않으려면, 그렇게 말 :

find /usr/local -maxdepth 1 -type d -name '*[0-9]' 

(. 당신이 마지막에 -maxdepth 1을 배치하면 find의 일부 버전은 그것에 대해 해군 사관 학교 생도 얻을 불평)

관련 문제