Подсчет количества букв в именах файлов не является безопасным способом определения переименованного имени файла.
Вместо этого создайте простой список имен в файле и сравните его с существующим списком. Используя diff
, вы увидите, какие именно строки (и )в списке изменились.
#!/bin/sh
LC_ALL=C
newlist=$HOME/filelist.new
oldlist=$HOME/filelist.old
echo /usr/hdp/2.6.4.0-91/tez_hive2/lib/*.jar >"$newlist"
if [ -f "$oldlist" ]; then
diff -u "$oldlist" "$newlist"
fi
mv "$newlist" "$oldlist"
Очевидно, что в первый раз, когда вы это сделаете, filelist.old
не будет существовать, поэтому diff
не запустится.
Обратите внимание, что я сохраняю полный путь к каждому файлу в выходном файле. Это не имеет значения, поскольку путь к каталогу является статическим.
Измените echo
на ls -l
, если вы хотите также сравнить метки времени и т. д. Измените его на stat
, если вы хотите сравнить еще больше метаданных (это будет генерировать вывод различий, когда даже последний -метка времени доступа к файлу изменена ). Установите wdiff
и измените diff
на wdiff
, чтобы получить разницу на основе слова -, а не строки -.
Параметр LC_ALL=C
должен гарантировать непротиворечивую сортировку расширения оболочки глобуса.
grep
по умолчанию использует регулярное выражение Posix Basic .
.*
в базовом регулярном выражении всегда является жадным соответствием , то есть оно соответствует чему угодно до последнего"
в строке.
Вместо этого вы можете использовать [^"]*
для соответствия чему угодно, кроме "
.
grep -o 'Competition="[^"]*"' 'Soccer_Data.xml' | sort --unique
Выход:
Competition="FA Cup"
В качестве альтернативы можно использовать регулярное выражение, совместимое с Perl, которое предоставляет не -жадный модификатор(.*?
).
Вы можете использовать grep -P
, если ваша версия grep
предусматривает (, и она будет, поскольку вы добавили тег [ubuntu]
к своему вопросу ).
grep -Po 'Competition=".*?"' 'Soccer_Data.xml' | sort --unique
или получать только FA CUP
, используя, например,. «Держать -снаружи»-->\K
:
grep -Po 'Competition="\K[^"]*' 'Soccer_Data.xml' | sort --unique
Выход:
FA Cup