파일 이름별로 파일 정렬

파일 이름별로 파일 정렬

Linux 스크립트(Bash)를 생성하여 패턴별로 파일 이름을 정렬하려고 합니다.

내 파일은 대부분 .JPG이고 일부는 .AV 및 .MP4입니다. 이 파일에는 손상된 태그(RAID 충돌로 인해 복원됨)가 있으므로 메타 태그를 사용할 수 없습니다.

내 파일의 대부분은 Seaxxx_A01_xxx.jpg 또는 Beach_xxx_A01A02_xxx.jpg 또는 Mountain_xxx_A04A12_xxx.jpg와 같은 태그가 포함되어 있습니다(이것은 사진을 찍은 사람과 장치(예: 카메라, 반사 등)에 대한 참조입니다.)

내 필요는 파일 이름을 기준으로 올바른 폴더와 하위 폴더에 파일을 넣는 것입니다.

나는 이 작업을 다음과 같이 달성한다고 생각합니다.

찾기를 사용하여 [AZ][0-2][0-6] 또는 [AZ][0-2][0-6][AZ][0-2][0-6] 패턴을 찾습니다. 가 발견되면 첫 번째 파일 이름 부분(예: 바다, 해변, 산, 가족 등...은 항상 첫 번째 단어로 배치되며 일반적으로 이전에는 다른 것이 없습니다)을 찾고 첫 번째 부분을 사용하여 찾습니다. 비슷한 이름의 폴더를 만들어서 넣습니다(내 파일에 Sea_Royan_xxx_A04A10_xxx.jpg가 포함되어 있고 "Sea"라는 이름의 폴더만 있는 경우 해당 폴더에 넣어야 합니다).

각 폴더에는 A01, A02, A03, A04 또는 Dio, Sandy, Mael 등과 같은 하위 폴더가 있으며 현재 발견된 파일을 원합니다(예: 상위 폴더인 Sea에 배치하는 데 사용된 파일과 동일). 산 등...) 위에 나열된 두 번째 패턴을 확인하여 올바른 하위 폴더를 배치하는 데 사용하세요.

사실 더 많은 것이 필요합니다. 파일을 찾고, 발견되면 파일 이름을 확인하고 두 가지 패턴을 사용하여 올바른 폴더와 하위 폴더로 이동합니다.

어떻게 할 수 있는지 알려주세요(패턴을 기반으로 파일을 찾는 방법은 알고 있지만 현재 발견된 파일 이름을 읽는 방법과 이 파일 이름에서 올바른 PATH로 사용될 두 패턴을 확인하는 방법은 모릅니다). 가장 쉬운 방법이나 더 좋은 방법을 알려주세요!

답변1

여기에 가능한 접근법이 하나 있는데, 아마도 가장 아름답지도 않고 가장 독창적이지도 않을 것입니다. 아이디어는 awk에서 정규식을 사용하여 파일 이름에서 관련 비트를 추출하는 것입니다. 그런 다음 awk에서 쉘 이동(mv) 명령을 빌드합니다. 마지막으로 awk에서 사용할 수 있는 시스템 명령을 사용하여 명령을 실행하고 파일을 적절한 하위 폴더로 이동합니다.

자세한 설명을 얻으려면 먼저 다음을 시도하십시오.

find . -mindepth 1 -maxdepth 1 -type f | awk '{ filename=$0; match(filename, "^([^_]+).*_(A.*)_", capture); folder=capture[1]; subfolder=capture[2];  cmd=("mv " "" filename " "  folder "/" subfolder); print "Command to be run: ", cmd }'

결과:

Command to be run:  mv ./Seaxxx_A01_xxx.jpg ./Seaxxx/A01
Command to be run:  mv ./Mountain_xxx_A04A12_xxx.jpg ./Mountain/A04A12
Command to be run:  mv ./Beach_xxx_A01A02_xxx.jpg ./Beach/A01A02

실제로 명령을 실행하려면 명령문 끝에 system(cmd)을 추가하십시오.

find . -mindepth 1 -maxdepth 1 -type f | awk '{ filename=$0; match(filename, "^([^_]+).*_(A.*)_", capture); folder=capture[1]; subfolder=capture[2];  cmd=("mv " "" filename " "  folder "/" subfolder); print "Command to be run: ", cmd; system(cmd) }'

아마도 당신이 원하는 한 가지는 정규식을 필요에 맞게 조정하는 것입니다. 나는 당신이 정규식에 익숙하다고 가정하고 여기서는 파일 이름의 두 부분을 캡처합니다. 캡처 그룹은 괄호 안에 표시됩니다.

파일 이름의 시작 부분부터 시작하여 밑줄 하나를 찾을 때까지 밑줄이 아닌 모든 항목을 가져옵니다. 그런 다음 A##### 패턴을 찾을 때까지 계속 찾습니다. 여기서 #은 문자/숫자(두 번째 캡처 그룹)를 나타냅니다. 다음 밑줄이 나올 때까지 캡처합니다.

관련 정보