디렉토리에 있는 assets/img/fly
불필요한 파일을 모두 삭제하고 싶습니다 _posts/2020-10-05-most-beautiful-story-i-ve-ever-heard.markdown
. 제외할 파일은 다음과 같습니다.
± |master → origin U:1 ✗| → grep '.jpg' _posts/2020-10-05-most-beautiful-story-i-ve-ever-heard.markdown
![](/assets/img/fly/UEGDXB3U.jpg)
![](/assets/img/fly/YB59X0IS.jpg)
![](/assets/img/fly/8FBFIDB3.jpg)
![](/assets/img/fly/CGMZAZU6.jpg)
![](/assets/img/fly/HNW7TV6D.jpg)
![](/assets/img/fly/UZRLR5TE.jpg)
![](/assets/img/fly/F6RZHWOD.jpg)
![](/assets/img/fly/LEDROO88.jpg)
![](/assets/img/fly/4LOGZOM0.jpg)
![](/assets/img/fly/OFGII4Z3.jpg)
![](/assets/img/fly/IGTJ2LYH.jpg)
![](/assets/img/fly/UOM780JG.jpg)
![](/assets/img/fly/WY28RY5O.jpg)
![](/assets/img/fly/TVDZMBDI.jpg)
디렉터리의 전체 파일은 다음과 같습니다.
± |master → origin U:1 ✗| → ls assets/img/fly
4LOGZOM0.jpg CGMZAZU6.jpg HNW7TV6D.jpg LEDROO88.jpg OFGII4Z3.jpg TVDZMBDI.jpg UOM780JG.jpg WY28RY5O.jpg YB59X0IS.jpg
8FBFIDB3.jpg F6RZHWOD.jpg IGTJ2LYH.jpg LVPJ7B4F.jpg RDO3AY0Z.jpg UEGDXB3U.jpg UZRLR5TE.jpg XISY5DZD.jpg YIXITHTJ.jpg
프로세스는 grep
출력 명령에서 파일 이름을 추출한 다음 이를 ls
.
답변1
#!/bin/bash
d="assets/img/fly"
f="_posts/2020-10-05-most-beautiful-story-i-ve-ever-heard.markdown"
find "$d" -type f -print0 |
grep -vzf <(grep -o "assets.*jpg" "$f") | xargs -0 echo rm --
echo
테스트가 정상이면 삭제하세요. 또한 실행 위치를 기준으로 Markdown 파일의 경로를 조정해야 할 수도 있습니다.
find
-print0
파일 이름을 유지하면서 0으로 구분된 인수를 다음 명령에 전달하여 디렉터리의 모든 파일을 가져옵니다 .
-z
플래그를 사용하면 grep
이러한 인수가 개행 대신 0 구분 기호로 필터링됩니다. -f
인수에서 첫 번째 파일의 패턴을 찾고 -v
일치하는 인수를 제외합니다.
패턴이 있는 파일은 실행 중인 프로세스로 대체되며 grep -o
제외할 파일의 전체 파일 이름이 반환됩니다. 또한 xargs -0
인수를 0으로 구분된 것으로 처리합니다.
모든 파일이 예제와 같다고 가정하고 파일 이름을 유지하지 않는 버전은 다음과 같습니다.
#!/bin/bash
d="assets/img/fly"
f="_posts/2020-10-05-most-beautiful-story-i-ve-ever-heard.markdown"
find "$d" -type f | grep -vf <(grep -o "assets.*jpg" "$f") | xargs echo rm --
참고: macOS GNU grep은 옵션을 지원하지 않습니다 -z
.