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

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

디렉터리 내의 모든 파일을 반복해야 합니다. 내가 본 일반적인 방법 중 하나는 로 시작하는 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

관련 정보