특정 디렉터리에 전체 경로가 포함된 많은 파일 목록이 있습니다. 이 디렉토리에서 파일에 1줄(2줄 이상)이 넘는 파일을 삭제하려고 합니다.
어떻게 하나요?
답변1
이것을 사용할 수 있습니다. 실행하기 전에 먼저 echo
대신 사용해 보세요 rm
.
for i in dir/*; do
lines=$(wc -l "$i")
if test $lines -gt 1; then
rm "$i"
fi
done
답변2
이 시도,
find . -type f -maxdepth 1 -exec bash -c '[[ $(wc -l < "$1") -gt 1 ]] && rm "$1"' _ '{}' \;
. -type f -maxdepth 1
현재 디렉터리에서 파일 찾기$(wc -l < "$1") -gt 1
행 수가 1보다 큰지 확인rm "$1"' _ '
현재 디렉터리의 파일만 삭제합니다.
답변3
해결책 awk
:
wc -l /path/to/dir/* | head -n -1` | awk '$1>1 {print $2}' | xargs rm
노트:
- 이 간단한 버전은 특수 문자를 지원하지 않습니다.
- 중요한 것은
wc -l
줄 수가 아니라 개행 문자의 발생 횟수라는 점을 기억하십시오. 따라서 두 줄이 있는 파일(두 번째 줄에는 LF가 없음)은 "1" 줄이 있는 것으로 보고됩니다.