원래 디렉터리에서 왔으며 특정 파일 이름 패턴을 가진 여러 입력 파일을 가져와야 하는 명령이 있습니다. 예를 들어:
디렉토리에
/home/mydir/
나는 파일을 가지고 있습니다 :
A.dat
B.dat
C.dat
readme.doc
".dat"로 끝나는 모든 파일을 이 명령에 전달하는 방법을 알고 싶습니다. 이는 다음과 같습니다.
command A.dat B.dat C.dat > /home/outputdir/output.dat
예를 들어 파일 이름을 목록에 저장하여 Python에서 이 작업을 수행할 수 있지만 셸에서는 어떻게 수행해야 합니까? 감사합니다.
답변1
표준 UNIX 쉘은 다음과 같은 작업을 수행합니다.와일드카드;특수 문자(예: 한 문자( ?
) 또는 임의 개수의 문자( *
))를 사용하여 표현됩니다. 예제를 사용하려면 다음을 실행하면 됩니다(첫 번째 문자는 $
입력한 내용이 아니라 명령 프롬프트를 나타냄).
$ command /home/mydir/*.dat > /home/outputdir/output.dat
쉘은 이를 다음으로 확장합니다.
$ command /home/mydir/A.dat /home/mydir/B.dat /home/mydir/C.dat > /home/outputdir/output.dat
실제로 명령을 호출하기 전에. *
"/home/mydir에서 ".dat"로 끝나는 모든 파일 이름을 가져옵니다 .
동일한 입력 파일이 주어지면 명령의 일부 변형의 경우:
# all of the sample input files have a single letter before the ".dat"
$ command /home/mydir/?.dat > /home/outputdir/output.dat
# the square brackets say "any (one) of these characters"
$ command /home/mydir/[ABC].dat > /home/outputdir/output.dat
답변2
대답은 실제로 사용하려는 도구에 따라 다릅니다. 일부는 여러 파일을 매개변수로 허용하도록 설계되었으며 다음과 같이 수행할 수 있습니다.
/path/to/some/tool file1 /path/to/file2 /path/to/lotsafiles/*
다른 것들은 파일을 인수로만 허용하도록 설계되었으므로 주소를 지정하려는 각 파일에 대해 호출을 반복해야 하며 이는 다음과 같이 수행될 수 있습니다.
for file in file1 /path/to/file2 /path/to/lotsafiles/*; do
/path/to/some/tool "$file"
done
한 번에 하나의 파일만 지정해야 하는지 확인하려면 프로그램 매뉴얼 페이지( man tool
)를 참조하십시오.