TXT 파일에 나열된 파일을 복사하고 이름을 바꾸려면 어떻게 해야 합니까?

TXT 파일에 나열된 파일을 복사하고 이름을 바꾸려면 어떻게 해야 합니까?

TXT 파일에 나열된 모든 파일을 한 위치에서 다른 위치로 복사해야 합니다.

/1132526906_tt_nad87_1.jpg  /thumb/t1132526906_tt_nad87_1.jpg
/1132526906_tt_nad87_10.jpg /thumb/t1132526906_tt_nad87_10.jpg
/1132526906_tt_nad87_11.jpg /thumb/t1132526906_tt_nad87_11.jpg
/1132526907_tt_nad87_12.jpg /thumb/t1132526907_tt_nad87_12.jpg
/1132526907_tt_nad87_13.jpg /thumb/t1132526907_tt_nad87_13.jpg
/1132526908_tt_nad87_14.jpg /thumb/t1132526908_tt_nad87_14.jpg

CSV 파일을 생성하고 사용 가능한 문자 중 일부를 사용하여 source나눌 수 있습니다.target

제 생각에는복사1132526906_tt_nad87_1.jpg에서 까지의 ./파일 - /thumb/t1132526906_tt_nad87_1.jpg이름이 변경되고 이동되었습니다.

질문

이를 수행할 수 있는 명령줄 명령이 있습니까? 예제를 찾았지만 이것들은 복사만 가능합니다(이름을 바꿀 수는 없음).

고쳐 쓰다

나는 이 스크립트를 만들었습니다:

#!/bin/bash

input="/data/web/web/gallery/data.csv"

while IFS=',' read from to
do
    echo "from: $from, to: $to"
done < "$input"

data.csv그러나 어떤 줄도 "반향"되지 않으며 파일을 읽지 않은 것 같습니다 . 뭐가 문제 야?

답변1

OP의 예에서 이름 바꾸기 및 변경 사항은 상당히 일관된 것으로 보입니다. 예를 들어 filename.jpg항상 "t" 접두사가 붙은 동일한 경로인 것 같습니다 thumb/tfilename.jpg. 그렇다면 더 간단한 방법이 있습니다.

모두 "thumb/" 디렉토리로 전송된 경우.

현재 디렉터리에는 테스트 파일 abc.jpg 및 xyz.jpg가 있습니다.

샘플 파일 목록은 다음과 같습니다.

$ cat testfile
abc.jpg
xyz.jpg

시험

echo를 사용하여 명령의 테스트 버전을 실행하여 코드가 수행할 작업을 확인하는 것이 도움이 될 수 있습니다.

$ while read my_file; do
   echo cp -a "$my_file" "thumb/t$my_file"
done < testfile

시험 결과:

cp -a abc.jpg thumb/tabc.jpg
cp -a xyz.jpg thumb/txyz.jpg
  • while read my_file; do ... done구문은 stdin을 한 줄씩 처리합니다.
  • < testfilewhile 문이 표준 입력을 읽을 수 있도록 표준 입력으로 <리디렉션하는 데 사용됩니다 .testfile
  • my_file코드 본문에서 볼 수 있듯이 입력을 유지하기 위해 만든 변수입니다.$my_file
  • cp파일 이름에 명령이 인수를 식별하는 데 사용하는 공백을 깨뜨릴 수 있는 공백이나 기타 이상한 문자가 포함된 경우 잠재적인 문제를 방지하려면 따옴표를 사용하십시오.

결정적인

테스트 에코 결과에 만족하면 에코를 제거하여 실제로 명령을 실행할 수 있습니다.

$ while read my_file; do
  cp -a "$my_file" "thumb/t$my_file"
done < testfile

디렉터리를 검사하면 thumb/거기에 복사된 두 개의 테스트 파일이 표시됩니다.

피드백이 포함된 최종 결과

기본적으로 cp오류가 없는 한 피드백은 제공되지 않습니다. 따라서 수백 또는 수천 개의 파일을 복사하는 경우 아무 일도 일어나지 않는 것처럼 나타날 수 있습니다. 피드백을 보려면 세부 옵션을 사용하십시오 -v.

$ while read my_file; do
  cp -av "$my_file" "thumb/t$my_file"
done < testfile

결과:

`abc.jpg' -> `thumb/tabc.jpg'
`xyz.jpg' -> `thumb/txyz.jpg'

답변2

가장 간단한 것은 다음과 같습니다 xargs.

< file-list.txt  xargs -n2 cp -v

관련 정보