bash(cygwin)를 통해 KeePass로 가져올 수 있도록 텍스트 파일(각각 사용자 이름+비밀번호 쌍 포함)을 CSV로 변환하려면 어떻게 해야 합니까?

bash(cygwin)를 통해 KeePass로 가져올 수 있도록 텍스트 파일(각각 사용자 이름+비밀번호 쌍 포함)을 CSV로 변환하려면 어떻게 해야 합니까?

나는 사용하고 싶다패스를 유지하다(win10x64).

문제는 이것이 수년에 걸쳐 내 비밀번호가 수집된 방식입니다.
각 사용자 이름/비밀번호 쌍은 별도의 텍스트 파일에 있고
파일 이름은 관련 비밀번호의 도메인 이름이며
각 .txt 파일의 첫 번째 줄은 다음과 같습니다. 사용자 이름 및 두 번째 비밀번호(접두사가 붙지 않음)

예를 들어:

파일 이름: ( reddit.com .txt 확장자도 있지만 생략 가능) 내용:

my_username  
my_Password


위의 내용을 CSV로 만들려면 다음으로 변환해야 합니다.

"Account","Login Name","Password","Web Site", "Notes"
"Entry 1","my_username","my_password","http://reddit.com", ""

"Account","Login Name",  "Password",    "Web Site",          "Notes"
"Entry 1","my_username", "my_password", "http://reddit.com", ""

참고: 비밀번호에 쉼표( ,), 큰따옴표( ") 또는 백슬래시( )가 있으면 백슬래시로 이스케이프해야 합니다.\

bash 스크립트(cygwin)를 통해 이 작업을 어떻게 수행할 수 있나요?


지금까지 수집한 코드 조각은 다음과 같습니다.

  1. 파일의 각 줄 시작 부분에 문자열을 추가하는 방법은 무엇입니까? (원천)

    awk '{print "prefix" $0}' file
    
  2. file.txt의 n번째 줄을 인쇄하세요. (원천)

    awk "NR==2{print;exit}" file.txt                // for printing the 2nd line
    
  3. 발견된 모든 파일에 대해 명령을 반복적으로 실행합니다.

    find . -name "*.txt" -execdir *command*
    

    또는 대안적으로

    for file in /cygdrive/c/folder/*; do 
         *command*                    // command example:   mv "$file" "${file}/.."   
    done
    


따라서 내 스크립트는 다음과 같이 시작해야 합니다.

find . -name "*.txt" -execdir        awk '{print '"Account","Account","Login Name","Password","Web Site", "Notes"' $0}' "$file"

나는이 시점에서 막혔다.

답변1

입력 파일:

  1. 야후.net.txt
  2. google.com.txt
  3. reddit.com.txt

콘텐츠 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",""

답변2

그리고awk

 awk 'BEGIN{print "\"Account\",\"Login Name\",\"Password\",\"Web Site\",\"Notes\""}
{ if (FNR==1){
         user=$0;a+=1};
  if(FNR==2){
         print "\""a"\",\""user"\",\""$0"\",\""gensub(/\.txt/,"","",FILENAME)"\","}}' *.txt

awk 특수 변수를 사용하여 FNR각 파일에서 첫 번째와 두 번째 줄을 가져오고 *.txt문자열 조작 기능을 사용하여 gensubURL 열(특수 변수)에서 제거합니다..txtFILENAMEawk

관련 정보