디렉터리 계층 구조의 파일 나열

디렉터리 계층 구조의 파일 나열

디렉터리 계층 구조에 파일을 나열해야 합니다. 이를 위해 나는 다음과 같은 스크립트를 작성했습니다.

foreach file ( * )
    ls ${file}/*/*/*/*/*.root > ${file}.txt
end

하지만 이를 위해서는 ${file} 디렉토리에 4개의 디렉토리가 있다는 것을 알아야 합니다. 그렇다면 얼마나 많은 하위 디렉터리가 존재하는지 알 필요가 없도록 이 스크립트를 일반화할 수 있는 방법이 있습니까?

답변1

csh이제 거의 모든 결과는 실제로 tcshtsh 6.18.00(20120114) 이상을 사용하는 경우 사용할 수 있습니다 **(확인 tcsh --version).

ls "${file}"/**/*.root

이것은 것이다오직globstar변수가 설정된 경우 작동합니다.

set globstar

다음의 전체 문서 tcsh(1):

쉘 변수는 모든 문자열(포함)과 일치하는 파일 전역 패턴을 globstar허용하거나 **기존 하위 디렉토리를 재귀적으로 순회하도록 설정할 수 있습니다. 예를 들어 현재 디렉터리 트리의 모든 .c 파일이 나열됩니다. 단독으로 사용하면 0개 이상의 하위 디렉토리와 일치합니다(예를 들어, /usr/include 디렉토리 트리에 이름이 지정된 모든 파일을 나열하고 /usr/include 디렉토리 트리에서 로 끝나는 모든 파일과 일치하며 모든 .h와 일치합니다). 하위 디렉터리 이름이나 파일 이름 자체에 있는 파일 ). 재귀 문제를 방지하기 위해 glob 패턴은 디렉터리가 포함된 기호 링크로 내려오지 않습니다. 이 설정을 재정의하려면 (+)를 사용하세요.***/ls **.cls /usr/include/**/time.htime.hls /usr/include/**time.htime.hls /usr/include/**time**.htime*****

답변2

사용find주문하다.

foreach file ( * )
    find ${file} -name "*.root" > ${file}.txt
end

약 20년이 지난 csh가 아닌 다른 쉘을 사용하는 것을 고려해 보십시오. zsh 또는 bash를 사용하여 대화식으로스크립트에 csh를 사용하지 마세요.

관련 정보