각 파일을 나타내는 한 줄의 전체 경로가 포함된 파일 목록이 포함된 텍스트 파일이 있습니다. 예를 들어 파일의 첫 번째 줄은 다음과 같습니다.
/mnt/data/data4/1998/reports/First Quarter.docx
모든 파일은 "data4" 부분(예: /mnt/data/data4)까지 동일한 경로를 공유합니다. 내가 원하는 것은 각 파일을 다른 드라이브로 옮기는 것입니다. 예를 들어 위 파일은 다음으로 이동됩니다.
/mnt/data/data11/1998/reports/First Quarter.docx
경로의 "data11" 부분은 변경되지 않고 그대로 유지되며 모든 파일에 대한 기존 경로의 "data4"를 대체합니다. 텍스트 파일과 파일 이름에 공백이 있습니다. /data11 다음의 대상 경로 부분이 이미 존재하는 경우도 있지만 존재하지 않는 경우도 있습니다.
나는 이것이 한 줄을 사용하여 수행될 수 있다고 생각 sed
하지만 그것을 잘 이해 xargs
하지 못하는 것 같습니다. mv
어떤 조언이라도 대단히 감사하겠습니다.
답변1
사용 rsync
:
synclist=$(mktemp)
sed 's,^/mnt/data/data4/,,' filelist.txt > "$synclist"
rsync -avh --files-from="$synclist" --remove-source-files /mnt/data/data4/ /mnt/data/data11/
rm "$synclist"
- 임시 파일을 생성하고 이를 변수에 할당합니다
synclist
. /mnt/data/data4/
모든 줄에서 접두사를 제거filelist.txt
하고 출력을 임시 파일에 저장합니다.$synclist
/mnt/data/data4/
에서 로 파일(현재 상대 경로)을 동기화합니다/mnt/data/data11/
.--remove-source-files
전송 후 소스 파일을 삭제하는 옵션 ( 과 유사mv
)- 임시 파일을 삭제합니다.