내 컴퓨터에는 개인 데이터베이스와 파일 경로가 저장되어 있습니다. 이 데이터는 다음과 같이 (매우 긴) 구분된 텍스트 파일로 저장됩니다.
============
NAME: John
TIME: 12:31:25
PATH: ./a/b/v/c #to some data related to the person
============
NAME: Jo
TIME: 11:21:11
PATH: ./c/s/d/f #to some data related to the person
============
NAME: Je
TIME: 10:51:15
PATH: ./q/n/h/l #to some data related to the person
============
...... # very long list of entries in this format.
NAME
각 항목이 포함된 폴더를 만든 다음 그 안에 있는 모든 항목을 폴더 PATH
에 복사하고 싶습니다 OUTPUT
. 명령의 모든 사람 grep
에 대해 아래 코드를 사용한 다음 모든 사람을 위해 모든 것을 한 번에 복사하고 있습니까 ?PATH
cp
NAMES
#!/bin/bash -f
source=PATH TO THIS TEXT DELIMITED FILE (log.log)
grep -o 'NAME.*' ./log.log | cut -f2- -d':'> ./name.log;
grep -o 'PATH.*' ./log.log | cut -f2- -d':'> ./path.log;
for i in $(cat ./name.log);do
mkdir ./${i};
for ii in $(cat ./path.log); do
(
cp ${ii}/*.* ./${i}
done
)&
done
저는 코딩 경험이 거의 없기 때문에 이 코드가 너무 복잡하다고 생각합니다. 이를 단순화하는 방법에 대한 조언이 필요합니까?
답변1
이런 식으로 시도해 볼 수도 있겠네요...
먼저 awk
동적으로 생성된 쉘 스크립트를 사용하십시오.
awk '
/NAME:/ {
name=gensub(/\"/, "", "g", substr($0, 7))
}
/PATH:/ {path=$2}
name && /=====/ {
printf "mkdir \"%s\"\n", name
printf "rsync -a \"%s/\" \"%s/\"\n", path, name
}
'
귀하의 입력에 따라 다음이 생성됩니다.
rsync -a "./a/b/v/c/" "John/"
rsync -a "./c/s/d/f/" "Jo/"
rsync -a "./q/n/h/l/" "Je/"
그런 다음 쉘 스크립트를 실행하십시오. 이를 하나의 작업으로 결합할 수 있습니다.
awk '
/NAME:/ {
name=gensub(/\"/, "", "g", substr($0, 7))
}
/PATH:/ {path=$2}
name && /=====/ {
printf "mkdir \"%s\"\n", name
printf "rsync -a \"%s/\" \"%s/\"\n", path, name
}
'
여기서는 내용을 복사하는 데 사용하고 있지만 rsync
물론 cp -r
.
또한 귀하의 코드에서 *.*
.
고쳐 쓰다
작동하도록 수정했습니다.
============
NAME: "John Frederick"
TIME: 12:31:25
PATH: ./a/b/v/c #to some data related to the person
============