저는 Linux에서 스크립팅을 처음 사용합니다.
각 줄에 하나 이상의 공백으로 구분된 두 개의 문자열(파일 경로)이 포함된 입력 텍스트 파일이 있습니다.
저는 첫 번째 문자열(경로)에 나열된 파일을 전달하고, 해당 파일을 두 번째 문자열(경로)에 복사하고, 각 입력 파일의 각 줄에 대해 반복하는 자동화된 스크립트 파일을 작성 중입니다.
입력 파일에 나열된 모든 파일이 포함된 .zip 파일이 있습니다.
다음과 같습니다.
/path/to/file.x /different/path/to/file.x
/path/to/file2.x /different/path/to/file2.x
등.
여기서 file.x가 전달된 다음 별도의 .zip 파일에서 다른 경로로 복사됩니다.
각 입력 파일에는 서로 다른 줄 수와 서로 다른 경로가 표시된 고유한 .zip이 있습니다.
나는 스크립트를 실행해 볼까 생각했습니다.
~$ ./script.sh files.zip map.txt
그런 다음 스크립트를 작성하십시오.
zipfile = "$1"
map = "$2"
externalprogram "$zipfile" "$map"
while IFS='' read -r line;
do
VAR_STR=$line
aLeng=${#VAR_STR[@]}
IFS=/ read -a arr <<< "$VAR_STR"
FILE="${arr[${aLeng}]-1}"
cp <path to zip file>/$FILE /different/path/
done < "$map"
분명히 꽤 복잡하고 두 번째 경로를 같은 줄의 변수로 전달하는 방법을 모르겠습니다.
어떤 의견이라도 감사하겠습니다. 감사해요.
편집: 스크립트 실행을 언급한 곳에 map.txt를 넣으라는 뜻이었습니다. 또한 이것은 나에게 꽤 복잡하다고 말하고 싶습니다. 아직 리눅스를 배우려면 할 일이 많아요^_^
답변1
귀하의 질문은 특정 질문이 아닌 의견을 공개적으로 요청하는 것이므로 여기에 몇 가지 의견이 있습니다.
- 이 명령을 최대한 활용하지 못하는 것 같습니다
read
. 예를 들어, 여러 필드를 고유 변수로 한 번에 읽어들이는 데 이를 쉽게 사용할 수 있는 방법을 알아보려면 매뉴얼 페이지 문서를 확인하세요.read path1 path2
. - 왜 할당하려고 합니까
VAR_STR=$line
? 제 생각에는 직접 할 수 있을 것 같습니다$line
. - 두 번째 필드에서 경로를 자르는 방법은 영리하지만 대부분의 다른 쉘에는 관용구를 사용하여 변수에서 접두사 패턴을 제거하는
bash
간단하고 간단하며 효율적인 방법이 있습니다 . . 다시 말하지만, 쉘이 기본적으로 매우 효율적으로 수행할 수 있는 다른 멋진 작업에 대한 문서는 매뉴얼 페이지를 참조하십시오.#
FILE=${path2##*/}
- bash 변수에 대한 개인 명명 규칙을 모두 소문자 또는 모두 대문자로 표준화하되 혼합하지 마십시오.
- "분명히..."로 시작하는 당신의 결론은 나에게는 전혀 명확하지 않습니다. 왜냐하면 나는 당신이 무슨 뜻인지 전혀 모르기 때문입니다.