배열을 반복하여 파일을 삭제하시겠습니까?

배열을 반복하여 파일을 삭제하시겠습니까?

파일 번호가 포함된 배열이 두 개 있는데 두 배열을 모두 읽고 파일을 삭제해야 합니다. 배열을 읽고 pri디렉터리 내의 파일을 삭제해야 합니다. 마찬가지로 배열을 /primary읽고 디렉터리 내의 파일을 삭제해야 합니다. 이 두 디렉터리에는 다른 파일과 기타 하위 디렉터리가 많이 있으므로 매우 주의해야 합니다. 이 두 배열에 언급된 파일만 삭제하면 됩니다.snd/secondary

모든 파일 이름은 다음과 같습니다.

abc_monthly_5_log.data
abc_monthly_25_log.data
abc_monthly_78_log.data

다음은 파일을 반복하고 파일을 하나씩 삭제할 수 있는 스크립트입니다. 다른 더 좋은 방법이 있나요?

# it will lot of file numbers not just four or five files
pri=(0 5 7 100)
snd=(9 8 187 90 156)

# iterate pri array and delete files inside
for pm in "${pri[@]}"; do
    rm /primary/abc_monthly_"$pm"_log.data
done

# iterate snd array and delete files inside
for sm in "${snd[@]}"; do
    rm /secondary/abc_monthly_"$sm"_log.data
done

답변1

rm덜 자주 실행되는 "더 나은" 방법은 다음을 사용하는 것입니다 xargs.

{
    for pm in "${pri[@]}"; do
        printf '/primary/abc_monthly_%s_log.data\n' "$pm"
    done

    for sm in "${snd[@]}"; do
        printf '/secondary/abc_monthly_%s_log.data\n' "$sm"
    done
} | xargs rm

이는 경로 이름을 생성하는 수단으로 루프를 사용합니다. 그런 다음 이러한 경로 이름은 이 경로 이름으로 전달되어 xargs rm가능한 한 많은 경로 이름을 동시에 실행합니다. rm제공한 예제 배열을 사용하면 다음이 실행될 수 있습니다.rm 한 번.

위에서 작성한 방식은 경로 구성 요소 중 어느 것도 리터럴 줄 바꿈이나 공백을 포함하지 않는다고 가정합니다(이 경우에는 포함되지 않음).

관련 정보