результат фильтрации команды ls для получения только определенных имен файлов на основе формата

Вы можете проверить временные метки двоичных файлов и время последнего обновления. Даты в каталогах могут дать некоторое представление о том, когда каталоги были изменены.

Но для этого нужны ошибки или нападение со стороны очень неопытного человека.

Как уже было сказано, отметка времени может быть изменена, но обычно ядро ​​также можно «пропатчить», так что вы не можете доверять никаким данным (также контрольным суммам файлов) с этого компьютера. Отсоедините жесткий диск и прочитайте с защищенной машины. Лучше: смените жесткий диск и снова установите программное обеспечение (возможно, защищенное) и данные из резервной копии.

1
11.07.2017, 23:34
3 ответа
grep -E '^${g_filPfix}-([0-9]{3})-([0-9]{8})-([0-9]{9})${g_fileExt}$'

Непосредственной проблемой здесь является то, что шаблон для grepзаключен в одинарные кавычки, поэтому оболочка не будет раскрывать переменные g_filPfixи g_fileExt. Замена кавычек двойными -кавычками исправит это. (и скобки в шаблоне не нужны.)

Подобный разбор вывода lsможет вызвать проблемы с именами файлов, содержащими пробелы или некоторые нечетные символы. В частности, имя файла с пробелом посередине будет восприниматься как два имени файла.

Если вам на самом деле не нужен такой строгий шаблон, вы можете просто обработать все файлы с данным префиксом и суффиксом:

for f in "$dir/$prefix"*"$suffix" ; do 
    somecmd "$f"
done

Если вам нужен строгий шаблон, некоторые оболочки (, такие как Bash, которые, вероятно, есть у вас в Linux ), могут выполнять сопоставление регулярных выражений без внешних инструментов. Таким образом, чтобы перебрать все файлы в каталоге и игнорировать файлы, не соответствующие шаблону:

for f in "$dir"/* ; do 
    [[ "$f" =~ "/$prefix"-[0-9]{3}-[0-9]{8}-[0-9]{9}"$suffix"$ ]] || continue
    somecmd "$f"
done
1
27.01.2020, 23:24

Не анализировать ls.

for file in "${g_inboundDir}"/XAI*.pdf; do 
    things_to "$file"
done
3
27.01.2020, 23:24

Не использовать grep ls. Вместо этого используйте поиск и регулярное выражение:

find ${g_inboundDir} -regextype sed -regex "^${g_filPfix}-([0-9]{3})-([0-9]{8})-([0-9]{9})${g_fileExt}$"

В конце вы можете использовать -exec, чтобы что-то сделать с этими файлами.
Проверьте man find , чтобы узнать больше о find:)

0
27.01.2020, 23:24

Теги

Похожие вопросы