디렉토리에 많은 파일이 있고 그 안에 예상되는 파일 목록이 있습니다.
예: 내가 가지고 있는 파일은 다음과 같습니다.
- 파일 1
- 파일 2
- 파일 3
예상되는 파일은
- 파일 1
- 파일 2
- 파일 4
나는 디렉토리를 테스트하고 싶었고 file4가 디렉토리에 없다는 것을 발견했습니다.
답변1
파일 이름이 포함된 배열이 있고 디렉토리에 존재하지 않는 파일을 찾으려면 배열을 반복하여 파일이 존재하는지 확인하십시오. ( 모든 유형의 일반 파일 -f
테스트 )-e
files=(file1 file2 file4)
for f in "${files[@]}" ; do
[ -f "$f" ] || echo "$f: not found"
done
그 반대도 비슷하지만 이중 루프가 필요하거나 배열을 연관 배열로 전환해야 합니다. 이중 루프를 사용하십시오.
files=(file1 file2 file4)
for f in * ; do
found=0
for g in "${files[@]}" ; do
[ "$f" = "$g" ] && found=1
done
[ "$found" = 0 ] && echo "$f: in directory but not listed"
done
답변2
배열 결합 및 빼기의 경우 zsh
대신 을 찾으십시오 bash
.
$ expected=(file1 file2 file4)
$ existing=(file1 file2 file3) # or existing=(file*) to use globbing
$ echo missing: ${expected:|existing}
missing: file4
$ echo found: ${expected:*existing}
found: file1 file2
$ echo unexpected: ${existing:|expected}
unexpected: file3
니모닉(적어도 내 것, 공식인지는 확실하지 않음):
${A:|B}
: 포인트들$A
술집그것들$B
${A:*B}
: 포인트들$A
주연그것들$B
.
답변3
여러 파일을 테스트해야 한다면 함수가 더 나은 솔루션입니다. 그렇지 않으면 간단한 ls
파일로 충분합니다! 찾고 있는 파일이 존재하지 않을 때 얻을 수 있는 출력은 다음과 같습니다.
../theDirIWantToCheck $ ls theFileIWantToFind.txt
ls: theFileIWantToFind.txt: No such file or directory
또한 탭 완성을 사용하는 것이 좋습니다. 명령을 실행 ls
하고 원하는 파일 이름을 입력하기 시작하십시오. 몇 개의 문자를 입력하고 Tab 키를 누르기만 하면 됩니다(작동하지 않으면 Tab 키를 두 번 누르십시오). 패턴과 일치하는 모든 파일 이름을 표시합니다존재한다면.
$ ls fi<tab>
file1.txt file2.txt file3.txt file_new.txt filetypes.txt
ls
여러 매개변수를 전달하여 여러 파일을 확인할 수도 있습니다 .
$ ls file1.txt file2.txt file3.txt
...
파일이 동일한 패턴 접두사(예: 위: file1, file2, file3)를 공유하는 경우 중괄호 확장을 사용할 수 있습니다. 이는 세 가지 매개변수를 모두 압축 형식으로 전달하는 것과 같습니다. ..
범위를 나타냅니다 .
$ ls file{1..3}.txt
ls: file1.txt: No such file or directory
ls: file2.txt: No such file or directory
ls: file3.txt: No such file or directory
또는 와일드카드를 사용하여 공통 접두사 "file"(예: file1.txt, file_other.txt)이 있는 가능한 모든 일치 패턴을 전달할 수 있습니다.
$ ls file*
...
마지막 ls
으로 echo
.-l
ls
크기 및 마지막 수정 날짜/시간.
답변4
perl -le '-e or print for qw/file1 file2 file4/'