Unix에서 특정 확장자로 끝나지 않는 파일 이름을 찾으십니까?
디렉토리 목록에서 확장자 목록으로 끝나지 않는 모든 파일을 재귀 적으로 찾을 수있는 간단한 방법이 있습니까? 예를 들어 * .dll 또는 * .exe가 아닌 모든 파일
UNIX / GNU 찾기는 강력하지만 exclude
모드 가없는 것 같습니다 (또는 누락되었습니다). 나는 항상 정규 표현식을 사용 하여 특정 표현식과 일치 하지 않는 것을 찾는 것이 어렵다는 것을 알게되었습니다 .
Windows 환경 ( 대부분의 GNU 도구 의 GnuWin32 포트 사용)에 있으므로 Windows 전용 솔루션에 대해서도 동일하게 개방되어 있습니다.
또는없이 (
그리고 그것을 벗어날 필요가 있습니다.
find . -not -name "*.exe" -not -name "*.dll"
디렉토리 목록도 제외
find . -not -name "*.exe" -not -name "*.dll" -not -type d
또는 긍정적 인 논리 ;-)
find . -not -name "*.exe" -not -name "*.dll" -type f
find . ! \( -name "*.exe" -o -name "*.dll" \)
$ find . -name \*.exe -o -name \*.dll -o -print
처음 두 개의 -name 옵션에는 -print 옵션이 없으므로 건너 뜁니다. 다른 모든 것이 인쇄됩니다.
grep 명령을 사용하여 무언가를 수행 할 수 있습니다.
find . | grep -v '(dll|exe)$'
이 -v
플래그는 grep
구체적으로 " 이 표현과 일치 하지 않는 것을 찾습니다"를 의미 합니다.
하나 더 :-)
$ ls -ltr 총 10 -rw-r--r-- 1 scripter linuxdumb 47 12 월 23 일 14:46 test1 -rw-r--r-- 1 scripter linuxdumb 0 1 월 4 일 23:40 test4 -rw-r--r-- 1 scripter linuxdumb 0 1 월 4 일 23:40 test3 -rw-r--r-- 1 scripter linuxdumb 0 1 월 4 일 23:40 test2 -rw-r--r-- 1 scripter linuxdumb 0 1 월 4 일 23:41 파일 5 -rw-r--r-- 1 scripter linuxdumb 0 1 월 4 일 23:41 파일 4 -rw-r--r-- 1 scripter linuxdumb 0 1 월 4 일 23:41 파일 3 -rw-r--r-- 1 scripter linuxdumb 0 1 월 4 일 23:41 파일 2 -rw-r--r-- 1 scripter linuxdumb 0 1 월 4 일 23:41 파일 1 $ 찾기. 유형 f! 이름 "* 1"! -이름 "* 2"-print ./test3 ./test4 ./file3 ./file4 ./file5 $
find /data1/batch/source/export -type f -not -name "*.dll" -not -name "*.exe"
리눅스 / OS X :
현재 디렉토리에서 시작하여 .dll 또는 .exe로 끝나는 모든 파일을 재귀 적으로 찾습니다.
find . -type f | grep -P "\.dll$|\.exe$"
현재 디렉터리에서 시작하여 .dll 또는 .exe로 끝나지 않는 모든 파일을 재귀 적으로 찾습니다.
find . -type f | grep -vP "\.dll$|\.exe$"
노트:
(1) grep의 P 옵션은 우리가 Perl 스타일을 사용하여 grep 명령 과 함께 사용할 정규 표현식을 작성하고 있음을 나타냅니다 . excecuting의 목적을 위해 그렙 정규 표현식과 함께 명령을, 나는 펄 스타일이 가장 강력한 스타일 주위는 사실을 알게 될 것입니다.
(2) grep의 v 옵션은 정규식을 만족하는 파일을 제외하도록 쉘에 지시합니다.
(3) ".dll $"의 끝에있는 $ 문자는 파일 이름 문자열이 ".dll"로 끝나는 것을 쉘에 알리는 구분 기호 제어 문자입니다.
이 페이지의 다른 솔루션은 확장 목록이 길거나 -not -name 'this' -not -name 'that' -not -name 'other'
지루하고 오류가 발생하기 쉬운 긴 확장 목록이 있거나 검색이 프로그래밍 방식이고 확장 목록이 런타임에 빌드되는 경우 바람직하지 않습니다 .
이러한 상황에서는 데이터 (확장자 목록)와 코드 (에 대한 매개 변수)를보다 명확하게 분리하는 솔루션이 find
바람직 할 수 있습니다. 다음과 같은 디렉토리 및 파일 구조가 제공됩니다.
.
└── a
├── 1.txt
├── 15.xml
├── 8.dll
├── b
│ ├── 16.xml
│ ├── 2.txt
│ ├── 9.dll
│ └── c
│ ├── 10.dll
│ ├── 17.xml
│ └── 3.txt
├── d
│ ├── 11.dll
│ ├── 18.xml
│ ├── 4.txt
│ └── e
│ ├── 12.dll
│ ├── 19.xml
│ └── 5.txt
└── f
├── 13.dll
├── 20.xml
├── 6.txt
└── g
├── 14.dll
├── 21.xml
└── 7.txt
다음과 같이 할 수 있습니다 :
## data section, list undesired extensions here
declare -a _BADEXT=(xml dll)
## code section, this never changes
BADEXT="$( IFS="|" ; echo "${_BADEXT[*]}" | sed 's/|/\\|/g' )"
find . -type f ! -regex ".*\.\($BADEXT\)"
결과 :
./a/1.txt
./a/b/2.txt
./a/b/c/3.txt
./a/d/4.txt
./a/d/e/5.txt
./a/f/6.txt
./a/f/g/7.txt
코드 블록을 변경하지 않고 확장 목록을 변경할 수 있습니다.
NOTE doesn't work with native OSX find
- use gnu find instead.
참고URL : https://stackoverflow.com/questions/1341467/find-filenames-not-ending-in-specific-extensions-on-unix
'development' 카테고리의 다른 글
typedef 고정 길이 배열 (0) | 2020.05.12 |
---|---|
부호있는 숫자에 대해 부호와 크기보다 2의 보수를 선호하는 이유는 무엇입니까? (0) | 2020.05.12 |
Angular JS : 범위가있는 지시문 컨트롤러가 이미있을 때 지시문 링크 기능이 필요한 것은 무엇입니까? (0) | 2020.05.12 |
도커 컨테이너가 즉시 종료되는 이유 (0) | 2020.05.12 |
VI가 커밋 메시지를 기다리는 화면에있을 때 Git 커밋을 어떻게 중지합니까? (0) | 2020.05.12 |