![아티팩트를 찾아 txt 파일로 병합하는 간단한 Linux 스크립트](https://linux55.com/image/127109/%EC%95%84%ED%8B%B0%ED%8C%A9%ED%8A%B8%EB%A5%BC%20%EC%B0%BE%EC%95%84%20txt%20%ED%8C%8C%EC%9D%BC%EB%A1%9C%20%EB%B3%91%ED%95%A9%ED%95%98%EB%8A%94%20%EA%B0%84%EB%8B%A8%ED%95%9C%20Linux%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8.png)
모든 것이 고려되었는지 확인하기 위해 거의 매주 빌드 아티팩트를 확인해야 합니다. 스크립트는 다음과 같습니다. 이 명령을 실행할 수 없습니다.
#!/bin/bash
cd /mydir/nextlevel/here
find . -name *.rpm > ~/rpm.txt
find . -name *.zip > ~/zip.txt
cd ~/
cat rpm.txt zip.txt > artifacts.txt
rm rpm.txt zip.txt
mv artifacts.txt /newdir/myname
답변1
가장 큰 문제는 두 줄입니다.
find . -name *.rpm > ~/rpm.txt
find . -name *.zip > ~/zip.txt
*.rpm
...그리고 *.zip
길과아니요이 대사를 인용해 보세요.
이는 예를 들어 etc(패턴과 일치하는 모든 이름) *.rpm
로 확장된다는 것을 의미합니다.file1.rpm file2.rpm
앞으로 find
전화도 했어요. 이로 인해 find
"알 수 없는 옵션"(또는 유사한 옵션)에 대한 불만이 발생할 수 있습니다 .
대신 확장되지 않은 파일 이름 패턴을 전달하려고 합니다.
find . -name '*.rpm' > ~/rpm.txt
find . -name '*.zip' > ~/zip.txt
이렇게 하면 스크립트가 제대로 작동하게 됩니다.
제안:
#!/bin/sh
find /mydir/nextlevel/here -type f \( -name '*.rpm' -o -name '*.zip' \) -print >/newdir/myname
이는 스크립트가 수행하는 모든 작업을 특정 파일 이름 접미사가 있는 파일을 찾고 파일에서 해당 이름을 수집하는 하나의 명령으로 결합합니다 /newdir/myname
.
유일한 차이점은가득한포함된 경로는 /mydir/nextlevel/here
각 파일 목록에 포함되며, 파일은 다른 순서로 나열될 수 있습니다.
다음 스크립트는 출력 파일의 경로를 수정합니다.
#!/bin/sh
cd /mydir/nextlevel/here &&
find . -type f \( -name '*.rpm' -o -name '*.zip' \) -print >/newdir/myname
지금도 find
계속되고 있어요오직성공 하면 cd
.
답변2
이 명령은 수행 중인 모든 작업을 수행합니다.
find /mydir/nextlevel/here \( -name "*.rpm" -o -name "*.zip" \) \
> /newdir/myname/artifacts.txt