파일 세트에 대해 명령을 반복하는 방법은 무엇입니까?

파일 세트에 대해 명령을 반복하는 방법은 무엇입니까?

다음 확장자 를 가진 파일로 가득 찬 폴더가 있습니다 .dot.

a.dot
b.dot
c.dot

이 폴더의 모든 파일을 찾아보고 다음과 같이 명령을 실행하고 싶습니다.

dot -Tpdf a.dot -o a.pdf
dot -Tpdf b.dot -o b.pdf
dot -Tpdf c.dot -o c.pdf

수직 막대를 사용하고 다음과 같은 명령을 실행해야 할 것 같습니다.

ls *.dot | dot -Tpdf ... -o ....pdf

하지만 파이프라인이 각 파일을 중간 부분에만 배치하도록 만드는 방법을 모르겠습니다. 을 사용해야 합니까 xargs? 그리고 연장 부분을 떼어낸 후 두 번째 부분에 얹는 방법도 나와있습니다. 최소한 올바른 방향(사용할 쉘 명령)을 알려줄 수 있다면 이 문제를 해결하는 데 도움이 될 것입니다.

답변1

사용

for i in *.dat ; do dot -Tpdf "$i" -o "$(basename "$i" dot)pdf" ; done

편집하다: 공백이 포함된 파일 이름을 올바르게 처리합니다.

답변2

매개변수파일 이름 집합을 반복하는 또 다른 방법입니다. 그러나 각 반복에서 파일 이름을 조작하는 데는 for 루프와 동일한 유연성이 없습니다.

ls *.dot | xargs -n1 -I FILE echo dot -Tpdf FILE -o FILE.pdf

결과는 다음과 같습니다

dot -Tpdf a.dot -o a.dot.pdf
dot -Tpdf b.dot -o b.dot.pdf
dot -Tpdf c.dot -o c.dot.pdf

답변3

당신이 팬이라면 다음 awksed같은 방법으로도 이를 달성할 수 있습니다.

ls *.dot | awk '{print("dot -Tpdf "$1" -o "$1)}' | sed 's/.dot/.pdf/2' | sh

관련 정보