코드의 이 부분에 대해 무엇을 알 수 있나요? [복사]

코드의 이 부분에 대해 무엇을 알 수 있나요? [복사]

스크립트의 이 부분은 무엇을 합니까? 이것은 bash 스크립트의 일부입니다.

for j in *.* ; do 
    cp $j ../../$name-S$i.gid/data/${j%%.*}$i.${j#*.}
    sed "s/$name-S/$name-S$i/" $j > ../../$name-S$i.gid/data/${j%%.*}$i.${j#*.}
done

"i"는 1부터 특정 숫자까지의 매개변수이고 "$name"은 폴더 이름의 일부라는 사실을 잊어버렸습니다.

답변1

이것은 어리석은 코드입니다. 먼저, 명확하게 하기 위해 다시 작성했습니다(인용문도 추가했습니다).

for j in *.* ; do 
    target_file="../../$name-S$i.gid/data/${j%%.*}$i.${j#*.}"
    cp "$j" "$target_file"
    sed "s/$name-S/$name-S$i/" "$j" >"$target_file"
done

즉, 파일을 복사한 후 즉시 새 파일을 덮어씁니다. 이름에 점이 포함된 모든 파일에 대해 이 작업을 수행합니다(그러나 시작 부분에는 없을 수도 있습니다. bash(in) 의 설정 에 따라 다릅니다 dotglob).

대상 파일 경로는 다음과 같이 구성됩니다.

  1. 다른 디렉토리에 넣으세요.

  2. 파일 확장자를 제거합니다(모든 부분, 즉 첫 번째 지점부터 시작하는 모든 부분).

  3. 번호를 추가한 i다음 이전 내선 번호를 추가하세요.

이 호출은 sed행의 첫 번째 발생(즉, 확장)만 (다시 확장)로 대체합니다.$name-S$name-S$i

관련 정보