찾기 명령: 여러 조건

찾기 명령: 여러 조건

파일/디렉터리 이름 지정의 표준으로 날짜와 레이블 문자열을 밑줄로 구분된 파일 이름에 넣는 것과 같은 방법을 사용합니다. 예를 들면 다음과 같습니다.

2015_03_10_usa_nyc_vacations_album_pictures

오랫동안 Recoll과 같은 소프트웨어를 사용해왔지만 일반적으로 이 소프트웨어는 필요한 것보다 더 많은 기록을 제공했습니다. 내 이름이 매우 일관적이므로 find 명령을 사용하여 스크립트를 작성하는 방법이 있어야 한다고 생각했습니다.

단일 조건에서 찾기 검색을 수행하는 방법을 알고 있지만 여러 조건/조건을 찾는 방법을 잘 모르겠습니다. 즉, 이름이 특정 조건을 충족하는 모든 파일을 찾는 방법입니다. 다음을 포함하는 다음 예를 고려해 보겠습니다.

  1. {2015} AND { {앨범} OR {사진} }
  2. {앨범} AND {휴일} AND NOT {2015}

답변1

처음으로

 find DIR \( -name 2015\* -a \( -name \*album\* -o -name \*picture\* \) \) -delete

어디

  • *확장을 피하려면 탈출해야 합니다.
  • 서브쉘 l을 피하려면 이스케이프 ( 및 )해야 합니다.
  • -delete마음에 드는 것으로 교체하세요

두 번째는 숙제로 남겨두세요(힌트 \!)

답변2

대개그럴 가치가 없어다음을 입력:

find /dir -regex '.*2015.*\(album.*\|picture.*\)'

시간을 낭비하지 말고 grep과 "작업당 하나의 도구"라는 UNIX 개념을 사용하십시오.

find /dir | egrep '2015.*(album|picture)'

이점:

  • 타이핑 횟수가 줄어들고 결과가 빨라집니다.
  • 더 읽기 쉽습니다(\ 없음, 불필요한 .*)
  • 더 빠르게 실행될 수 있습니다. 파이프 명령을 사용하면 커널이 두 CPU 간에 균형을 유지할 수 있습니다. 예, 지금은 일반 콘솔에서 테스트했습니다)
  • 파일 목록이나 다른 소스에서 읽으려는 경우 동작은 비슷합니다.

답변3

첫 번째 경우 find에는 -regex괜찮을 것입니다.

find /dir -regex '.*2015.*\(album.*\|picture.*\)'

두 번째의 경우:

find . -name "*album*" -a -name "*vacations*" -a -not -name "*2015*"

관련 정보