파일 번호가 포함된 배열이 두 개 있는데 두 배열을 모두 읽고 파일을 삭제해야 합니다. 배열을 읽고 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
한 번.
위에서 작성한 방식은 경로 구성 요소 중 어느 것도 리터럴 줄 바꿈이나 공백을 포함하지 않는다고 가정합니다(이 경우에는 포함되지 않음).