다음 확장자 를 가진 파일로 가득 찬 폴더가 있습니다 .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
당신이 팬이라면 다음 awk
과 sed
같은 방법으로도 이를 달성할 수 있습니다.
ls *.dot | awk '{print("dot -Tpdf "$1" -o "$1)}' | sed 's/.dot/.pdf/2' | sh