Вы можете использовать это. Прежде чем выполнять его, вы должны сначала попробовать echo
вместо rm
.
for i in dir/*; do
lines=$(wc -l "$i")
if test $lines -gt 1; then
rm "$i"
fi
done
Попробуйте это,
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"' _ '
удалять файлы только в текущем каталоге. Решение awk
:
wc -l /path/to/dir/* | head -n -1` | awk '$1>1 {print $2}' | xargs rm
Примечания:
wc -l
считает не строки, а количество переводов строки. Таким образом, файл с двумя строками (, но без LF на второй ), будет сообщен как имеющий строку «1».