동적 이름을 가진 파일이 있는지 확인하세요.

동적 이름을 가진 파일이 있는지 확인하세요.

, 와 같은 동적 이름과 버전을 가진 파일이 있습니다 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"

관련 정보