보관 중에 생성된 디렉터리 구조가 있습니다. 아카이브 시스템은 변경할 수 없습니다. 중복 디렉터리가 발생할 때마다 아카이버는 디렉터리 이름에 정수 접미사를 추가합니다. 내 목표는 이름당 하나의 디렉터리만 있고(접미사 없음) 하위 디렉터리가 병합되도록 이러한 디렉터리를 축소하는 것입니다.
# 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
출력을 파이핑하려고 시도했지만 rsync
a) 이를 달성할 정규식과 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
확인될 때까지 주석 처리됨)