디렉토리의 모든 파일과 디렉토리를 반복하는 방법은 무엇입니까?

디렉토리의 모든 파일과 디렉토리를 반복하는 방법은 무엇입니까?

디렉터리의 모든 파일/디렉터리를 반복하려고 합니다. 여기에는 모든 숨겨진 파일( .및 제외 ..)도 포함됩니다. Bash의 이전 주제에서 다음을 사용하는 것이 좋습니다.

for current in $1/$run_folder/{..?,.[!.],}*;
    echo current
done

나는 그것을 시도했지만 tcsh작동하지 않았습니다. 어떻게 해야 합니까 tcsh?

답변1

나는 거의 사용하지 않지만 옵션 1을 사용하면 원하는 것을 얻을 tcsh수 있습니다 .globdot

  globdot (+)
           If  set,  wild-card glob patterns will match files and directo‐
           ries beginning with `.' except for `.' and `..'

그래서

#!/bin/tcsh

set globdot

foreach current ($1:q/$run_folder:q/*)
  printf '%s\n' $current:q
end

잘못될 수도 있으니 주의하세요일치하지 않음디렉터리에 숨겨지지 않은 파일이 없으면 오류가 발생합니다.

이 문제는 함께 일치하는 것으로 알려진 와일드카드를 포함하여 해결할 수 있습니다 *.

#!/bin/tcsh

set globdot

set files = (/de[v] $1:q/$run_folder:q/*)
shift files

foreach current ($files:q)
  printf '%s\n' $current:q
end

그런데 올바른 구문 은 다음과 bash같습니다.

#! /bin/bash -
shopt -s nullglob dotglob
for current in "$1/$run_folder"/*; do
  printf '%s\n' "$current"
done

echo임의의 데이터에 사용할 수 없는 주변 따옴표를 확장하는 것을 잊어버렸고 , 기본적으로 일치하지 않는 전역 변수를 실수로 남겨 두었습니다. 이 dotglob옵션( csh/tcsh/zsh 와 동일 globdot)은 이러한 3가지 다른 glob이 필요하지 않습니다.


노트:

  1. (+)기능이 있음 을 나타냅니다 ."대부분의 csh(1) 구현(특히 4.4BSD csh)에서는 찾을 수 없습니다."

관련 정보