이름이 끝나는 디렉터리 이동 - list.txt 파일과 일치하는 번호

이름이 끝나는 디렉터리 이동 - list.txt 파일과 일치하는 번호

폴더 구조 그래픽:

여기에 이미지 설명을 입력하세요

저는 고급 쉘 명령과 스크립팅을 처음 접했습니다. 나는 기본적인 터미널 지식을 가지고 있지만 이전에 이와 같은 자동화를 만들려고 시도한 적이 없습니다. 순수한 초보자입니다.

이 게시물에서는 목표를 단순화했지만 실제 프로젝트는 수천 개의 폴더에 대한 것입니다.

기본적으로 소스 및 대상 폴더가 있습니다. 소스 폴더에는 접두사 "Car"와 "세 개의 숫자"가 붙은 디렉터리가 있습니다.

Source 폴더에 한 줄에 "3개의 숫자" 목록이 있는 list.txt라는 텍스트 파일이 있습니다.

디렉토리를 찾고 목록을 읽는 명령이나 스크립트를 작성하고 싶습니다. 디렉터리 이름의 마지막 세 자리가 목록의 세 자리와 일치하는 경우. 일치하는 폴더를 대상 폴더로 이동하고 싶습니다.

나는 find, -exec mv, xargs, "IFS 읽기 동안"을 사용하여 다양한 방법을 읽었으며 이에 접근하는 가장 좋은 방법을 정말로 모릅니다. 나는 이제 막 시작했고 이 포럼의 누군가가 나를 때리지 않고 차임할 수 있기를 바랐습니다.

답변1

DestinationSource( .사진 참조) 의 상위 디렉터리에서 실행할 스크립트 :

#!/bin/sh
while IFS= read -r l; do
   mv "Source/Car$l/" Destination/.
done < Source/list.txt

이 스크립트는 Source/list.txt한 줄씩 읽습니다. 각 줄마다 $l이름이 지정된 디렉터리를 Source/Car$l로 이동하려고 시도합니다 Destination/..

의 도트 경로 이름 구성 요소는 존재하지 않는 Destination/.경우를 대비한 트릭입니다 . 존재하지 Destination않으면 Destination첫 번째 이름 을 안에 넣는 대신 으로 mv "Source/Car…/" Destination/이름을 바꿉니다 . 점이 차이를 만듭니다. 대상이 존재 하고 존재하지 않으면 명령이 오류와 함께 종료됩니다.Source/Car…/Destination/Destination/Destination/.Destination/mv

스크립트는멍청한, 읽은 내용에 대해 온전한 검사를 수행하지 않습니다 Source/list.txt. 예를 들어 다음 줄이 있으면 001/../../../../../../../../../../home/roco/.ssh스크립트는 ~/.ssh/디렉터리를 Destination/. 빈 줄이 있으면 스크립트는 이동을 시도합니다 Source/Car/. 마지막 줄이 불완전하면 도달할 수 없습니다 mv(참조while루프가 마지막 줄을 인식하지 못하는 이유는 무엇입니까?).

관련 정보