Bash, просмотрите список директорий и сгенерируйте md5. - PullRequest
0 голосов
/ 24 июля 2011

Какой будет bash-скрипт, который:

  1. Проходит через каталог и помещает все подкаталоги в массив
  2. Для каждого каталога создайте сумму md5файл внутри этого каталога

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

/var/mobile/Applications/{ the dir name here is taken from the array }/{some name}.app/{ binary, who's name is the same as it's parent dir, but without the .app extension }

Я никогда раньше не работал с bash (и никогда не нуждался в этом), так что это может быть что-то действительно простое и непонятное.У кого-нибудь есть идея?Как видно по пути, он предназначен для запуска на iDevice.

Ответы [ 3 ]

2 голосов
/ 24 июля 2011

Попробуйте что-то вроде:

ls -1 /Applications/*/Contents/Info.plist | while read name; do md5 -r "$name"; done

выше будет показана контрольная сумма md5 для всех файлов Info.plist для всех приложений, например:

d3bde2b76489e1ac081b68bbf18a7c29 /Applications/Address Book.app/Contents/Info.plist
6a093349355d20d4af85460340bc72b2 /Applications/Automator.app/Contents/Info.plist
f1c120d6ccc0426a1d3be16c81639ecb /Applications/Calculator.app/Contents/Info.plist
2 голосов
/ 24 июля 2011
for dir in /var/mobile/Applications/*; do
  for app in "$dir"/*.app; do
    appdirname=${app##*/}
    appname=${appdirname%.app}
    binary="$app/$appname"
    if [ -f "$binary" ]; then
      echo "I: dir=$dir appbase=$appbase binary=$binary"
    fi
  done
done

Попробуйте, я надеюсь, что код прост. Стоит объяснить две вещи:

  • ${app##*/}, который использует оператор ##, чтобы убрать самый длинный префикс, соответствующий выражению */.
  • ${appdirname%.app}, который использует оператор % для удаления кратчайшего суффикса, соответствующего выражению .app. (Вы могли бы также использовать %% (самый длинный суффикс полосы) вместо %, поскольку шаблон .app всегда имеет длину четыре символа.)
0 голосов
/ 25 июля 2011

Bash очень прост, но вам необходимо знать инструменты вашей системы.

Для рекурсивной печати хэша md5 всех файлов каталога:

find /yourdirectory/ -type f | xargs md5sum

Если вы хотите перечислить только дерево каталогов:

find /tmp/ -type d

Вы можете создать список с помощью:

MYLIST=$( find /tmp/ -type d )

Используйте «for» для итерации списка:

for i in $MYLIST; do
    echo $i;
done

Если вы новичок в bash:

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