파일/디렉터리 이름 지정의 표준으로 날짜와 레이블 문자열을 밑줄로 구분된 파일 이름에 넣는 것과 같은 방법을 사용합니다. 예를 들면 다음과 같습니다.
2015_03_10_usa_nyc_vacations_album_pictures
오랫동안 Recoll과 같은 소프트웨어를 사용해왔지만 일반적으로 이 소프트웨어는 필요한 것보다 더 많은 기록을 제공했습니다. 내 이름이 매우 일관적이므로 find 명령을 사용하여 스크립트를 작성하는 방법이 있어야 한다고 생각했습니다.
단일 조건에서 찾기 검색을 수행하는 방법을 알고 있지만 여러 조건/조건을 찾는 방법을 잘 모르겠습니다. 즉, 이름이 특정 조건을 충족하는 모든 파일을 찾는 방법입니다. 다음을 포함하는 다음 예를 고려해 보겠습니다.
- {2015} AND { {앨범} OR {사진} }
- {앨범} 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*"