xargs를 통해 파일을 rm으로 파이프하려고 합니다. 내가 하고 싶은 일을 git clean으로 할 수 있다는 건 알지만, cli로 연습하고 있어요.
나는 이것을 시도했습니다 :
for files in $(git status --porcelain| sed 's/^??//g'); do echo $files; done | xargs rm -rf
하지만 작동하지 않습니다. 나는 이것이 런타임 때문이라고 생각합니다.
for files in $(git status --porcelain| sed 's/^??//g'); do echo $files; done | xargs
파일은 공백으로 구분된 1개의 문자열로 표시됩니다.
하지만 실행하면 for files in $(git status --porcelain| sed 's/^??//g'); do echo -n $files; done
파일이 콘솔에 별도의 줄로 표시됩니다.
그래서 (내가 옳다면)
for files in $(git status --porcelain| sed 's/^??//g'); do echo -n $files; done | xargs
: 과 의 차이점은 무엇입니까?
for files in $(git status --porcelain| sed 's/^??//g'); do echo -n $files; done
두 번째 경우의 파일은 각 줄에 표시되는 반면 첫 번째 경우에는 문자열입니까? rm -rf와 함께 작동하도록 이 문제를 어떻게 수정합니까?
답변1
당신은 인생을 불필요하게 복잡하게 만들고 있습니다 ;-)
하위 쉘 명령(귀하의 표현식 $()
)이 이미 파일 이름 목록을 제공하고 "대상 명령"(귀하의 경우 rm -rf )이 이미 파일 이름 목록을 허용하는 경우 그냥 사용하지 않는 것이 좋습니다.
git status --porcelain| sed 's/^??//g' | xargs rm -rf
또는 bash에서 "for 루프"를 연습하려면 xargs가 필요하지 않습니다.
for f in $(git status --porcelain| sed 's/^??//g') ; do
rm -rf $f
done
그런데... 실행하기 전에 "rm -rf" 명령을 다시 확인하세요("rm -rf" 앞에 "echo" 추가). 어리석은 실수가 발생하면 후회하게 될 것입니다!