파일 목록별로 폴더의 파일 이동

파일 목록별로 폴더의 파일 이동

.txt폴더 목록이 포함된 파일이 있습니다 .

old_folder_path1,new_folder_path1
old_folder_path2,new_folder_path2
old_folder_path3,new_folder_path3

쉘 명령을 실행하여 각 폴더 시리즈의 파일을 이전 폴더에서 새 폴더로 이동하고 싶습니다. 또한 하위 폴더는 덮어쓰거나 이동되지 않고 각 폴더 내의 파일만 이동됩니다.

.txt필요한 경우 이를 수용하기 위해 파일의 구문을 변경할 수 있습니다.

답변1

사용 rsync:

while IFS=, read -r src dest; do
    [ ! -d "$src" ] && echo "skipping missing directory \"$src\"" >&2 && continue
    mkdir -p "$dest" && rsync -av --exclude='*/' --remove-source-files --ignore-existing "$src/" "$dest"
done < file.txt

스크립트는 file.txt한 줄씩 읽고 소스 및 대상 디렉터리를 변수 srcsum 에 할당합니다 dest. 행 IFS은 (내부 필드 구분자) 변수에 정의된 쉼표로 구분됩니다. 디렉터리가 아니면 srcwhile 루프가 다음 줄에서 계속됩니다. 그렇지 않고 대상 디렉터리가 없으면 대상 디렉터리와 해당 상위 디렉터리가 생성됩니다.

rsync통화 중에 다음 옵션을 사용하십시오( 참조 man rsync).

  • -a보관 모드(옵션의 약자 -rlptgoD)
  • -v상세 모드
  • --exclude='*/'디렉터리를 제외하고 디렉터리가 아닌 디렉터리만 전송
  • --remove-source-files전송이 완료된 후 송신측에서 파일을 삭제합니다. (예: mv)
  • --ignore-existing대상에 이미 존재하는 파일을 전송하지 마십시오

스크립트를 쉘 스크립트로 저장할 수 있습니다 mv_rsync.sh.

#!/bin/sh

[ $# -ne 1 ] && echo "invalid file argument" >&2 && exit 1
while IFS=, read -r src dest; do
    [ ! -d "$src" ] && echo "skipping missing directory \"$src\"" >&2 && continue
    mkdir -p "$dest" && rsync -av --exclude='*/' --remove-source-files --ignore-existing "$src/" "$dest"
done < "$1"

실행 가능하게 만들어라

chmod +x ./mv_rsync.sh

다음과 같이 실행하십시오.

./mv_rsync.sh file.txt

관련 정보