, 와 같은 동적 이름과 버전을 가진 파일이 있습니다 Abc.1.0.zip
. Abc.2.0.zip
버전에 관계없이 파일이 존재하는지 확인하고 싶습니다. 나는 노력했다
find -name "Abc(.*).zip"
그러나 이것은 정규식을 고려하지 않습니다. 또한 find
결과를 가져와서 개수가 1보다 큰지 확인한 다음 해당 변수를 조건에 사용할 수 있습니다.
쉘 스크립트에서 이와 같이 한 줄에 부울 값을 반환하는 쉬운 방법이 있습니까 fileExists Abc.1.0.zip
?
답변1
find(GNU)가 정규 표현식을 사용하게 하려면 -regex
다음과 같은 옵션을 사용해야 합니다:
find . -regex ".*Abc.[0-9]+.[0-9]+.zip"
또한 -regextype
옵션을 사용하여 다양한 정규식 유형을 언급 할 수 있습니다.-regex
유효한 유형은 다음과 같습니다.'findutils-default', 'awk', 'egrep', 'ed', 'emacs', 'gnu-awk', 'grep', 'posix-awk', 'posix-basic', 'posix-egrep', 'posix-extend', 'posix-minimal-basic', 'sed'.
를 사용하면 find
옵션을 사용하여 찾은 각 파일에 대해 명령을 실행할 수 있습니다 -exec
. 따라서 파일이 발견되면 제공한 명령이 실행됩니다.
전임자:
$ find . -regex ".*Abc.[0-9]+.[0-9]+.zip" -exec file {} \;
./Abc.1.0.zip: Zip archive data, at least v2.0 to extract
./Abc.2.0.zip: Zip archive data, at least v2.0 to extract
파일이 셸에 있는지 테스트하려면 다음 명령을 사용할 수 있습니다.
[[ -f "Abc.1.0.zip" ]] && echo "File exists" || echo "File Not Exists"