우분투에서 bash 에서 for loop 질문 하나 드립니다.

Lv.1 겨울심장 (210.♡.245.252)

2024년 4월 30일 PM 04:50 · 수정됨(05. 01. 11:57)

조회 332 공감 0

특정 숫자이름의 폴더에 있는 파일을 해당숫자의 이름으로 바꾸어 복사저장하려는데요


for i in 1 2 ... 99

do

cp 'i'/*.dcm sample/'i'.dcm

done


이렇게 해서 1 2 .. 99 이름 안에 있는 aaa 확장자를 가진 파일을 (*.aaa) (폴더마다 aaa 파일 1개 있음)

파일이름을 폴더이름으로 바꾸어 sample 폴더 안으로 저장하려고 해요. 

루프 돌리는 i 를 지정하는게 '' 아니라 어떻게 해야 하나요? 

댓글 (8)

  • 항상초보

    항상초보 Lv.1

    24.04.30 · 175.♡.194.75

    Linux 쉘 스크립트에서 변수를 사용할 때, 변수의 값을 확장하려면 $ 기호를 사용해야 합니다. 그리고 파일 이름이나 경로에서 변수를 사용할 때는 따옴표로 묶지 않거나, 변수 부분만 더블 쿼트(")로 묶어야 합니다.

    아래 스크립트는 각 숫자 이름의 폴더에서 .aaa 확장자를 가진 파일을 찾아서 파일 이름을 폴더 이름과 동일하게 하여 sample 폴더에 복사합니다. 파일이 각 폴더에 하나씩만 있다고 가정하면 다음과 같이 스크립트를 작성할 수 있습니다:

    #!/bin/bash

    for i in {1..99}; do
    # $i 폴더에서 .aaa 확장자를 가진 파일을 찾아서 복사
    cp "${i}"/*.aaa "sample/${i}.aaa"
    done

    이 스크립트를 설명하면:

    {1..99}는 1부터 99까지의 범위를 생성합니다.
    cp "${i}"/*.aaa "sample/${i}.aaa"에서 ${i}는 현재 반복의 숫자를 나타냅니다. 이 명령은 각 숫자 이름 폴더에서 .aaa 파일을 찾아 sample 디렉토리로 파일 이름을 변경하여 복사합니다.
    위 스크립트를 실행하기 전에 sample 폴더가 이미 존재하는지 확인하고, 없다면 생성해야 합니다:

    gpt4 사용해봤습니다.
  • 겨울심장 Lv.1 → 항상초보 작성자

    24.04.30 · 219.♡.183.66

    해결했습니다. 감사합니다!
  • 까만청년

    까만청년 Lv.1

    24.04.30 · 211.♡.125.5

    seq 1 99 | awk '{ system("cp "$1"/*.dcm sample/"$1".dcm")} '
    잘 안될 수도 있어요 ^^.. 전 저녁 먹으러...
  • 겨울심장 Lv.1 → 까만청년 작성자

    24.04.30 · 219.♡.183.66

    해결했습니다. 감사합니다!
  • 디클

    디클 Lv.1

    24.04.30 · 124.♡.100.52

    seq 1 99 | xargs -t -I{} sh -c 'cp {}/*.dcm sample/{}.dcm'

    xargs 명령어로도 확장 할 수 있습니다.
  • 겨울심장 Lv.1 → 디클 작성자

    24.04.30 · 219.♡.183.66

    해결했습니다. 감사합니다!
  • 동독도

    동독도 Lv.1

    24.05.01 · 198.♡.180.151

    이런 스크립트 전 chatGPT한테 물어보니 잘 알려주더라고요. 물론 원하는걸 얻기위해서 여러번 물어봐야 합니다.
  • 겨울심장 Lv.1 → 동독도 작성자

    24.05.01 · 219.♡.183.66

    감사합니다

댓글을 작성하려면 이 필요합니다.