다음과 같은 파일 세트가 있습니다.
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