невозможно выполнить команду с оператором find в солярисе - PullRequest
0 голосов
/ 10 мая 2019

скрипт нормально работает на Ubuntu Linux, и я могу вызвать bin_packing.awk, но когда я пытаюсь запустить его на Unix Solaris, я получаю сообщение об ошибке:

find: bad option -printf
find: [-H | -L] path-list predicate-list
awk: syntax error near line 1
awk: bailing out near line 1

это скрипт, который работает на Ubuntu

$ find . -type f -iname '*pdf' -printf "%s %p\n" \
  | awk -v c=100000 -f bin_packing.awk

Я попробовал это, и это работает, но без | AWK ... часть

 $ find . -type f -name '*.pdf' -print | perl -lne '$,=" "; @s=stat $_; print $s[7],$_' \
  | awk -v c=100000 -f bin_packing.awk

Ответы [ 2 ]

4 голосов
/ 10 мая 2019

В современных системах вы можете использовать GNU stat или GNU find для извлечения размера без необходимости делать что-то ужасное, например, parse ls.

К сожалению, вы не в современной системеНастало время сделать что-то ужасное.К счастью, размер - это одно из полей ls, которое можно полу-надежно анализировать (при запуске его только для одного файла за раз), если вы работаете на платформе, которая не допускает таких сумасшедших вещей, как имена пользователей спробелы.

find . -type f -iname '*.pdf' -exec bash -c '
for name; do
  read -r _ _ _ _ size _ < <(ls -l -- "$name")
  printf "%s %s\n" "$size" "$name"
done
' _ {} + | awk -v c=100000 -f bin_packing.awk

Если синтаксис -exec ... {} + не работает, вы можете изменить + на \;, чтобы сделать это медленнее, но более совместимым.

1 голос
/ 15 мая 2019

Если у вас есть текущая версия Solaris, вы можете использовать опцию find -print.Для старых версий Solaris используйте gfind (для поиска GNU).

...