Входные файлы:
yahoo.net.txt
:
user1-yaho0
pas,,
Содержание gougle.com.txt
:
user1-google
pas"wor,d
Содержание reddit.com.txt
:
user1-reddit
pas\wor\d
С этим входом, следующий быстрый и грязный сценарий делает работу:
#!/bin/bash
echo "\"Account\",\"Login Name\",\"Password\",\"Web Site\",\"Notes\"" > output.csv
num=0
for f in `find . -type f -name '*.txt'` ; do
num=$((num + 1))
user=`head -1 "$f"`
password=`sed 1d "$f" | sed -r 's/([\\,"])/\\\\\1/g'`
domain=`basename "$f" | sed 's/\.txt$//'`
echo "\"$num\",\"$user\",\"$password\",\"$domain\",\"\"" >> output.csv
done
Содержание output.csv
:
"Account","Login Name","Password","Web Site","Notes"
"1","user1-reddit","pas\\wor\\d","reddit.com",""
"2","user1-yaho","pas\,\,","yahoo.net",""
"3","user1-google","pas\"wor\,d","gougle.com",""
Не делайте этого, так как это может привести к внедрению кода, а также избегайте передачи паролей в аргументах команд, поскольку они затем становятся общедоступными, отображаясь в выходных данных ps
и иногда регистрируются в некоторых журналах аудита.
Обычно лучше использовать переменные окружения:
PASSWORD="$Password" python3 -c 'import os, crypt
print(crypt.crypt(os.getenv("PASSWORD"), crypt.mksalt(crypt.METHOD_SHA512)))'
(здесь используется синтаксис VAR=value cmd
в отличие от export VAR
, поэтому переменная среды передается только для этого одного вызова команды ).
Не надо.
python -c 'import sys; import crypt; print(crypt.crypt(sys.argv[1], crypt.mksalt(crypt.METHOD_SHA512)))' "$Password"