디렉토리의 내용을 반복하는 올바른 방법

디렉토리의 내용을 반복하는 올바른 방법

디렉터리의 각 파일을 반복해야 합니다. 내가 본 일반적인 접근 방식 중 하나는 로 시작하는 for 루프를 사용하는 것입니다 for file in *; do. 그러나 숨겨진 파일("."로 시작하는 파일)은 포함되지 않는다는 것을 깨달았습니다. 또 다른 확실한 방법은 다음과 같은 작업을 수행하는 것입니다.

for file in `ls -a`; do

그러나 ls파일 이름에 공백이 있으면 모든 것이 엉망이 되기 때문에 반복하는 것은 좋지 않은 생각입니다. 디렉토리를 반복하고 모든 숨겨진 파일을 얻는 올바른 방법은 무엇입니까?

답변1

공백으로 구분된 전체 일치 파일 목록을 생성하기만 하면 됩니다.

for file in .* *; do echo "$file"; done

편집하다

위의 내용은 중괄호 확장을 사용하여 다른 형식으로 다시 작성할 수 있습니다.

 for file in {.*,*}; do echo "$file"; done

더 짧게:for file in {.,}*; do echo "$file"; done

선택한 파일에 경로를 추가합니다.

 for file in /path/{..?,.[!.],}*; do echo "$file"; done

선택한 파일에 경로를 추가합니다.

 for file in /path/{.,}*; do echo "$file"; done

.복잡해지고 일반적 으로 필요하지 않은 항목을 목록에서 제거하려면 로 ..변경하면 됩니다 .{.,}*{..?,.[!.],}*

완벽함을 위해 도트 파일을 일반 *.

shopt -s dotglob

불일치 시 오류를 방지하려면 zsh추가 설정이 필요합니다 .nullglob

setopt nullglob

N또는 패턴에 glob 한정자를 추가할 수 있습니다 .

for file in /path/{.,}*(N); do echo "$file"; done

관련 정보