파일 이름별로 Linux 스크립트(Bash)를 생성하여 패턴별로 파일을 정렬하려고 합니다.
내 파일은 대부분 .JPG이고 일부는 .AV 및 .MP4입니다. 파일의 태그가 손상되었기 때문에(RAID 충돌에서 복구 중) 메타 태그를 사용할 수 없습니다.
내 파일의 대부분에는 Seaxxx_A01_xxx.jpg 또는 Beach_xxx_A01A02_xxx.jpg 또는 Mountain_xxx_A04A12_xxx.jpg와 같은 태그가 있습니다(이것은 내가 찍은 사진 및 장비에 대한 참조입니다(예: 카메라, 반사 등...).
내 필요는 파일을 이름에 따라 올바른 폴더와 하위 폴더에 넣는 것입니다.
나는 이것이 작업을 달성한다고 생각합니다.
find를 사용하여 [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에 넣는 데 사용된 파일과 동일). 파일) 산 등...) 올바른 하위 폴더를 배치하려면 위에 나열된 두 번째 패턴을 확인하세요.
실제로 더 간단하게는 파일을 찾고 파일 이름을 확인한 다음 두 가지 모드를 사용하여 올바른 폴더와 하위 폴더로 이동해야 합니다.
더 쉬운 방법이 있는 경우 이를 수행하는 방법을 알려주십시오(패턴을 기반으로 파일을 찾는 방법을 알고 있지만 현재 발견된 파일 이름을 읽고 이 파일 이름에서 두 패턴을 모두 확인하여 올바른 경로로 사용하는 방법은 모릅니다). 더 나은 방법을 알려주세요!
답변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###### 패턴을 찾을 때까지 계속 찾습니다. 여기서 #은 문자/숫자(두 번째 캡처 그룹)를 나타냅니다. 다음 밑줄을 누를 때까지 캡처합니다.