경로를 유지/생성하면서 텍스트 파일에 나열된 파일을 이동합니다.

경로를 유지/생성하면서 텍스트 파일에 나열된 파일을 이동합니다.

각 파일을 나타내는 한 줄의 전체 경로가 포함된 파일 목록이 포함된 텍스트 파일이 있습니다. 예를 들어 파일의 첫 번째 줄은 다음과 같습니다.

/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"
  1. 임시 파일을 생성하고 이를 변수에 할당합니다 synclist.
  2. /mnt/data/data4/모든 줄에서 접두사를 제거 filelist.txt하고 출력을 임시 파일에 저장합니다.
  3. $synclist/mnt/data/data4/에서 로 파일(현재 상대 경로)을 동기화합니다 /mnt/data/data11/. --remove-source-files전송 후 소스 파일을 삭제하는 옵션 ( 과 유사 mv)
  4. 임시 파일을 삭제합니다.

관련 정보