접미사를 기준으로 디렉토리 병합

접미사를 기준으로 디렉토리 병합

보관 중에 생성된 디렉터리 구조가 있습니다. 아카이브 시스템은 변경할 수 없습니다. 중복 디렉터리가 발생할 때마다 아카이버는 디렉터리 이름에 정수 접미사를 추가합니다. 내 목표는 이름당 하나의 디렉터리만 있고(접미사 없음) 하위 디렉터리가 병합되도록 이러한 디렉터리를 축소하는 것입니다.

# Current Structure
/
+-- Folder_Name/
    +-- 20170913/
        +-- File One
+-- Folder_Name_1/
    +-- 20170913/
        +-- File One
        +-- File Two
+-- Folder_Name_2/
    +-- 20170915/
        +-- File Three
+-- Folder_Name_3/
    +-- 20170918/
        +-- File Four

# What I would like to achieve
/
+-- Folder_Name/
    +-- 20170913/
        +-- File One
        +-- File Two
    +-- 20170915/
        +-- File Three
    +-- 20170918/
        +-- File Four

보관 과정에서 수많은 폴더가 생성되고(모든 이미지의 월별 백업을 저장하는 초음파 기계입니다), 복제본이 생성되는 경우가 많습니다. 동시에 ImageMagick을 사용하여 비트맵 파일을 png로 변환하여 파일 크기를 줄입니다.

이 작업을 수행하기 위해 --remove-source-files 옵션을 사용해 보았지만 rsync이러한 디렉터리를 일치시키는 방법을 찾지 못했습니다 rsync (정규 표현식을 지원하지 않는 것 같습니다). 그런 다음 find출력을 파이핑하려고 시도했지만 rsynca) 이를 달성할 정규식과 b) 접미사가 있거나 없는 디렉터리 이름을 제공하는 방법을 알아낼 수 없었습니다. 이를 위해서는 변수를 사용해야 할 것 같은데 쉘 스크립팅에 대한 경험이 없습니다.

나는 여기서 올바른 접근 방식을 취하고 있습니까? 그렇다면 누군가 설정 과정을 안내할 수 있는 리소스나 튜토리얼을 알려줄 수 있습니까? 그렇지 않다면 어떤 도구 사용을 고려해야 합니까?

답변1

나는 아주 간단하다고 확신합니다

cp -R Folder_Name_*/* Folder_Name

모든 병합이 자동으로 수행됩니다. 결과를 확인한 후 원본 디렉터리를 삭제할 수 있습니다.

병합할 폴더가 여러 개 있는 경우 for해당 폴더 주위에 루프를 만듭니다.

for folder in *_1; do
  folder="${folder%_*}"
  cp -R "$folder"_* "$folder"
  # rm -rf "$folder"_*
done

( rm확인될 때까지 주석 처리됨)

관련 정보