다음과 같은 일련의 파일이 있습니다.
File.Number.{1..10}.txt
나는 그 안에 존재하는 파일의 배열이나 시퀀스를 얻고 싶습니다. 지루한 접근 방식은 모든 항목을 반복하여 배열에 추가하는 것입니다. 어떤 파일이 존재하지 않는지 알려주거나 파일 번호를 추출할 수 있는 줄이 있는지 궁금합니다.
답변1
(귀하의 질문에 한 곳에서는 "존재하는 파일"이라고 되어 있고 다른 곳에서는 "존재하지 않는 파일"이라고 되어 있어서 어느 쪽을 원하는지 잘 모르겠습니다.)
그것들을 얻기 위해서하다있는 경우 Bash에서 확장 글로브를 사용할 수 있습니다.
$ shopt -s nullglob
$ echo File.Number.@([1-9]|10).txt
File.Number.10.txt File.Number.1.txt File.Number.7.txt File.Number.9.txt
glob과 일치하는 파일이 없으면 아무것도 반환되지 않도록 shopt -s nullglob
bash에 대한 옵션을 활성화합니다 . nullglob
이것이 없으면 일치 항목이 없는 glob이 자체적으로 확장됩니다.
또는 더 간단하게 Zsh의 숫자 범위는 다음과 같습니다.
% echo File.Number.<1-10>.txt
File.Number.10.txt File.Number.1.txt File.Number.7.txt File.Number.9.txt
루핑도 그렇게 나쁘지 않으며 필요한 파일을 찾는 데 도움이 됩니다.원하지 않는다glob보다 존재하는 것이 더 좋습니다.
$ a=(); for f in File.Number.{1..10}.txt; do [ -f "$f" ] || a+=("$f"); done
$ echo "these ${#a[@]} files didn't exist: ${a[@]}"
these 6 files didn't exist: File.Number.2.txt File.Number.3.txt File.Number.4.txt File.Number.5.txt File.Number.6.txt File.Number.8.txt
답변2
그냥 사용ls File.Number.{1..10}.txt >/dev/null
아래 예.
$ ls
File.Number.1.txt File.Number.3.txt
$ ls File.Number.{1..10}.txt >/dev/null
ls: cannot access 'File.Number.2.txt': No such file or directory
ls: cannot access 'File.Number.4.txt': No such file or directory
ls: cannot access 'File.Number.5.txt': No such file or directory
ls: cannot access 'File.Number.6.txt': No such file or directory
ls: cannot access 'File.Number.7.txt': No such file or directory
ls: cannot access 'File.Number.8.txt': No such file or directory
ls: cannot access 'File.Number.9.txt': No such file or directory
ls: cannot access 'File.Number.10.txt': No such file or directory
$
답변3
에서 zsh
특정 디렉토리의 기존 항목을 참조하는 요소로 목록을 줄이려면 다음을 수행할 수 있습니다.
dir=/some/dir
list=(File.Number.{1..10}.txt other-file-{a,b}.txt)
existing_in_dir=($dir/$^list(N:t))
non_existing=(${list:|existing_in_dir})
답변4
cd /tmp
base=foo
number=42
touch $base.$number.{3,6}.txt
for f in $base.$number.{1..10}.txt
do
[ -f $f ] || echo $f
done
rm $base.$number.{3,6}.txt
$base
또는 에 특수문자가 포함된 경우에는 더욱 주의가 필요합니다 $number
.