
.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
한 줄씩 읽고 소스 및 대상 디렉터리를 변수 src
sum 에 할당합니다 dest
. 행 IFS
은 (내부 필드 구분자) 변수에 정의된 쉼표로 구분됩니다. 디렉터리가 아니면 src
while 루프가 다음 줄에서 계속됩니다. 그렇지 않고 대상 디렉터리가 없으면 대상 디렉터리와 해당 상위 디렉터리가 생성됩니다.
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