for 루프에서 파일 그룹을 반복합니다.

for 루프에서 파일 그룹을 반복합니다.

다음과 같은 파일 세트가 있습니다.

A1.xlsx
A2.xlsx
B1.xlsx
C1.xlsx
C2.xlsx

접두사(A, B, C)만 알고 있고 나머지 이름은 파일 개수와 마찬가지로 사전에 알 수 없습니다. 몇 가지 명령을 호출하여 다음과 같이 파일 그룹을 전달해야 합니다.

mycommand A*.xlsx
mv A*.xlsx tmp/
mycommand B*.xlsx
mv B*.xlsx tmp/
mycommand C*.xlsx
mv C*.xlsx tmp/

다양한 루프 구문을 시도했지만 for fileGroup in A* B* C*파일 이름을 하나씩만 전달할 수 있거나 mycommand모든 파일에 대해 한 번만 호출할 수 있습니다. mycommand이를 수행하는 구문이 bash에 있습니까?

답변1

당신이 접두사를 알고 있고 하드코딩할 수 있다고 가정합니다:

for p in A B C D; do
    mycommand "$p"*.xlsx
    mv "$p"*.xlsx tmp/
    ...
done

답변2

이들 모두에 대해 glob 표현식을 사용하십시오. A또는 또는 로 B시작하는 파일 의 경우 C.

<mycommand> [ABC]*.xlsx
mv -t tmp/ -- [ABC]*.xlsx

여기세상에 대한 훌륭한 읽기입니다.


많은 파일 인수를 허용하지 않는 명령을 실행해야 하는 경우 각 인수에 대해 별도의 프로세스를 호출해야 하지만 여전히 동일한 glob을 사용하여 모두 선택할 수 있습니다.

for f in [ABC]*.xlsx; do
    <some_command> "$f"
done

관련 정보