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