bash 명령 줄당 여러 매개변수를 읽는 방법은 무엇입니까?

bash 명령 줄당 여러 매개변수를 읽는 방법은 무엇입니까?

다음 형식의 파일(ordered_names)이 있습니다.

pub 000.html
pub.19 001.html

약 300줄인데 mv 명령에 입력할 방법을 찾을 수 없습니다.

내가 읽고파일에 저장된 문자열을 명령의 인수 목록으로 제공하시겠습니까?, 하지만 내가 원하는 것을 얻을 수 없습니다.

제가 시도한 몇 가지 사항은 다음과 같습니다.

for line in "$(cat ../ordered_files.reversed)"; do mv  $(echo "$line"); done
for line in "$(cat ../ordered_files.reversed)"; do echo mv $(echo $line | cut -d' ' -f 1) $(echo $line | cut -d' ' -f 2) ; done

답변1

노력하다:

while read -r file1 file2; do mv -n -- "$file1" "$file2"; done <inputfile

이는 입력 파일의 각 줄에 대한 파일 이름이 공백으로 구분되어 있다고 가정합니다. 물론 이는 파일 이름 자체에 공백이 포함되지 않은 경우에만 작동합니다. 그렇다면 다른 입력 형식이 필요합니다.

어떻게 작동하나요?

  • while read -r file1 file2; do

    그러면 사이클이 시작됩니다 while. 입력이 가능한 한 루프는 계속됩니다. 각 입력 라인에 대해 두 개의 매개변수( file1및 ) 를 읽습니다 file2.

  • mv -n -- "$file1" "$file2"

    file1로 이동합니다 file2.

    이 옵션을 사용하면 -n대상 위치에 있는 파일을 덮어쓰는 것을 방지할 수 있습니다. 물론 파일을 덮어쓰려면 이 옵션을 제거하세요.

    이 문자열은 --옵션의 끝을 나타냅니다. 파일 이름이 -.

  • done

    이것은 주기의 끝을 표시합니다 while.

  • <inputfile

    이는 while루프가 이름이 지정된 파일에서 입력을 받도록 지시합니다 inputfile.

관련 정보