Tente:
for f in *; do
if [ -f "$f" ] && [ "$(tail -n1 -- "$f")" != "hello world" ]; then
printf '%s\n' "$f"
fi
done
Eu quero encontrar todos os arquivos de texto em um diretório que não termine com a string:
hello world
Como posso fazer isso?
Tente:
for f in *; do
if [ -f "$f" ] && [ "$(tail -n1 -- "$f")" != "hello world" ]; then
printf '%s\n' "$f"
fi
done
Experimente esta versão testada:
#!/usr/bin/awk -f
BEGIN {
last=FILENAME;
}
{
if (last != FILENAME) {
if (line !~ /^hello world$/ && line != "hello world") {
print last;
}
last=FILENAME;
}
line=$0;
}
END {
if (line !~ /^hello world$/ && line != "hello world") {
print FILENAME;
}
}
O teste:
$ chmod +x script.awk
$ ls
script.awk test1.txt test2.txt test3.txt
$ ./script.awk $(find . -type f -exec file {} + | fgrep text | cut -d: -f1)
./script.awk
./test1.txt
cd /my/directory/path
for file in *
do
grep -v '^$' < "${file}" | tail -1 | grep "hello world" > /dev/null; result=${?}
if [ "${result}" -ne 0 ]
then
echo "${file}"
fi
done
A parte grep -v '^$' < "${file}"
elimina as linhas vazias que podem ser adicionadas ao final. Se isso não for desejado, você pode omitir essa parte e iniciar essa linha como tail -1 < "${file}"