Заказ обработки и печать файлов с находкой

Загрузите живое распределение CD/USB и запишите случайные данные на всем протяжении рассматриваемых жестких дисков несколько раз (я видел заявления, который даже после 10 переписывает исходную информацию, является все еще восстанавливаемым, но от дисков, которые несли СОВЕРШЕННО СЕКРЕТНЫЕ данные, избавляются довольно другим способом).

Не использовать /dev/urandom или даже /dev/random непосредственно как случайный источник данных с этой целью, или у Вас закончится кофе, ожидающий первичной обработки для завершения.

Получить много "случайных данных" быстро:

  • настройте устройство шифрования - любой через cryptsetup (который использует Картопостроитель Устройства ядра), или losetup (использует более старый cryptoloop, но достаточен для этого конкретного случая, Вы просто, возможно, должны были бы modprobe cryptoloop поскольку модуль обычно не загружается по умолчанию, и без него losetup сбои с немного загадочным - хотя не зашифрованный - сообщение) - см. страницы справочника для деталей. Так как Вы не должны будете получать доступ к мусору, не стесняйтесь использовать данные из /dev/urandom (или /dev/random) как пароль - это также эффективно устраняет необходимость ввести случайный пароль на каждой передаче.

  • dd if=/dev/zero of=<encrypted device> bs=16M

Если машина является достаточно недавней, используйте алгоритм, который имеет хорошую поддержку оборудования (AES, Шифр, Twofish, Camelia должен все дать Вам 20-50MB/s на разумном процессоре с 2007).

Установка и удаление зашифрованного раздела с cryptsetup:

$ dd if=/dev/urandom bs=1c count=32 \
    | cryptsetup create \
          -c twofish-cbc-essiv:sha256 -s 256 -h plain garbage /dev/sda
# the resulting device is /dev/mapper/garbage
$ cryptsetup remove garbage

Установка и удаление зашифрованного раздела с losetup:

$ dd if=/dev/urandom bs=1c count=32 | losetup -p 0 -e twofish /dev/loop3 /dev/sda
# the resulting device is /dev/loop3
$ losetup -d /dev/loop3
2
17.12.2013, 00:07
3 ответа

find не имеет никакого отношения к удару, это - отдельная утилита, вероятно, обеспеченная в Вашей системе GNU findutils при выполнении Linux.

-print перечисляет файлы, но Вам не нужен он - это - значение по умолчанию. Причина Вы, вероятно, не "видите" их, состоит в том, потому что ее вывод берется xargs на stdin - это никогда не достигает Вашего терминала. Если Вы хотите, чтобы это перешло к обоим, необходимо использовать tee или подобный (отмечают, что, если Вы получаете недоверяемые имена файлов, необходимо всегда использовать -print0, который не включен здесь, потому что это - непортативное расширение):

find . -name '*.php' |
    tee >(xargs xgettext -j --from-code=UTF-8 -o "$TARGET/$LPATH/$POFILE")

find распечатает файлы в порядке, он находит их, который не отсортирован. Если Вы хотите, чтобы они были в порядке, необходимо пробежать sort сначала.

4
27.01.2020, 21:57

Если Ваш целевой каталог не имеет никаких sub папок, Вы могли бы попытаться использовать * развернуть все файлы, заканчивающиеся в .php и выполните итерации по ним с xgettext. Это устранило бы необходимость find и xargs.

for i in ./*.php; do
    xgettext -j --from-code=UTF-8 -o $TARGET/$LPATH/$POFILE $i
done

Если необходимо сделать рекурсивный поиск с find, Вы могли выполнить итерации по выводу оболочки sub, содержащей Ваш find команда.

for i in $(find . -name '*.php'); do
    xgettext -j --from-code=UTF-8 -o $TARGET/$LPATH/$POFILE $i
done
0
27.01.2020, 21:57
  • 1
    Находка является рекурсивной, это решение не. Если Вы хотели сделать рекурсивный шарик, Вам нужен bash4 + и globstar, но остерегайтесь его поврежденной обработки символьной ссылки. –  Chris Down 17.12.2013, 05:19

find . -name '*.php' -print действительно печатает список имен файлов. Это то, где xargs получает его вход от.

Для предотвращения противных неожиданностей с именами файлов, содержащими пробел и другие специальные символы, использовать -print0 и xargs -0

find . -name '*.php' -print0 | xargs -0 xgettext -j --from-code=UTF-8 -o "$TARGET/$LPATH/$POFILE"

или используйте -exec действие вместо этого:

find . -name '*.php' -exec xgettext -j --from-code=UTF-8 -o "$TARGET/$LPATH/$POFILE" {} +

Остерегайтесь этого, если существует слишком много файлов, xgettext будет несколько раз выполняться, однажды на пакет файлов. Это идет, использовали ли Вы xargs или -exec. Для предотвращения этого, так как Вы используете удар, используют его встроенную рекурсивную функцию обхода каталога вместо find.

shopt -s globstar
xgettext -j --from-code=UTF-8 -o "$TARGET/$LPATH/$POFILE" **/*.php

Таким образом, если имена составного файла пробегаются через предел длины командной строки, Вы получите ошибку вместо тихо усеченного файла. Остерегайтесь этого в ударе, **/ символьные ссылки пересечений на каталоги, не просто каталоги. Если это, проблема, или используют ksh или zsh вместо удара, или используют другой метод.

С find, чтобы не тихо перезаписывать выходной файл много раз, запишите в стандартный вывод и перенаправьте целое find управляйте в файл.

find . -name '*.php' -exec xgettext -j --from-code=UTF-8 {} + >"$TARGET/$LPATH/$POFILE"

find файлы списков в порядке, это находит их, это не делает никакой сортировки. Ни сортировка по имени, ни сортировка каталогов прежде или после других файлов. (Каталоги являются файлами. Нет отдельного списка подкаталогов и других файлов в каталоге.)

find всегда перечисляет содержание каталога сразу после самого каталога. С опцией -depth, это инвертируется: сначала содержание каталога, затем самого каталога.

1
27.01.2020, 21:57

Теги

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