2016-07-14 4 views
-1

홈 디렉토리의 10 개 서브 디렉토리 (1-10)에 데이터를 정렬하는 유닉스 쉘 스크립트를 작성하고 있습니다. 각 하위 디렉토리에서 스크립트는 hehd.output 및 fort.hehd.time 파일의 이름을 바꾸고 hehd.data 파일을 새 이름으로 .data 파일에 복사해야합니다.쉘 스크립트에서 변수가있는 파일 이름 지정

AA.BB.CC

AA = a variable in the hehd.data file within the subdirectory containing the file 
    BB = the name of the subdirectory containing the file (1-10) 
    CC = the original file name 

각 하위 디렉토리는 hehd을 포함

: 나는 그것을 할 싶습니다 무엇

는 다음과 같은 형식으로 각 파일의 이름을 변경합니다. 데이터 파일이고 각 hehd.data 파일에는 ij0 = AA 문자열이 들어 있습니다. 여기서 AA는 동일한 하위 디렉토리의 파일 이름을 바꾸는 데 사용할 변수를 나타냅니다.

예를 들어

: 실행하면 스크립트는 문자열 ij0 = 2에 대한 /home/4/hehd.data 검색 /home/4/2.4.hehd하는 /home/4/hehd.output 이동해야 .산출.

현재 grep 명령을 사용하여 스크립트에서 문자열 ij0 = *을 검색하고 하위 디렉토리 내의 새 텍스트 파일에 복사합니다. 그런 다음 문자열 ij0 =이 텍스트 파일에서 삭제 된 다음 해당 내용이 동일한 하위 디렉토리에있는 모든 대상 파일의 이름을 바꾸는 데 사용됩니다. 쉘 스크립트의 마지막 줄은 텍스트 파일을 삭제합니다.

저는 이것을 수행하는 더 좋은 방법을 찾고 있습니다. 동일한 스크립트로 10 개의 하위 디렉토리를 한꺼번에 정렬 할 수 있도록하는 것이 좋습니다. 내 스크립트는 매우 비효율적 인 것처럼 보였고, 내가 원하는 모든 것을 자체적으로 수행하지는 않습니다.

어떻게 향상시킬 수 있습니까?

조언이나 제안 사항을 보내 주시면 감사하겠습니다. 나는 더 나은 컴퓨터 사용자가되기 위해 노력하고 있으며 이는 일을 더 잘 수행하는 방법을 배우는 것을 의미합니다.

+1

영어 의사 코드와는 달리 실제 코드를 입력 해보십시오. 구현 세부 사항이 중요하므로 구현 내용을 읽지 않고도 구현 내용을 볼 수 없습니다. –

+1

(일반적으로 StackOverflow에는 특정 답변이있는 집중적 인 질문이 있으며, "X를 토론 할 수 있습니까?"로 해석 될 수있는 자유로운 질문은 "어떻게해야합니까? 문제 X를 해결할 수 있습니까? "라고 말하면서 구체적인 솔루션을 제공합니다. 범용"이 코드를 어떻게 개선 할 수 있습니까? "질문은 http : //codereview.stackexchange를 참조하십시오.co.kr/-하지만 재 게시하기보다는 사이트 규칙을 읽으십시오). –

+1

... http://stackoverflow.com/help/dont-ask 유사한 영역을 포함합니다. –

답변

0

이 시도 :

fromdir=/home 
for i in {1..10};do 
    AA=$(sed 's/ij0=\([0-9]*\)/\1/' "$fromdir/$i/hehd.data") 
    BB="$i" 
    for f in "$fromdir/$i/"*;do 
    CC="${f##*/}" 
    if [[ "$CC" = "hehd.data" ]]; then 
     echo cp "$f" "$fromdir/$i/$AA.$BB.$CC" 
    else 
     echo mv "$f" "$fromdir/$i/$AA.$BB.$CC" 
    fi 
    done 
done 

그것은 배쉬 순서 {1..10]를 사용하여 디렉토리를 통해 반복합니다.

각 디렉토리에서, AA 변수에 ij0 값이 할당되고, 디렉토리 이름은 BB으로 지정됩니다.

파일 루프에서 파일이 hehd.data이면 복사되고 그렇지 않으면 새 이름으로 바뀝니다.

출력이 cpmv 명령보다 먼저 출력되는 내용이 사용자의 요구 사항을 충족하는 경우 제거 할 수 있습니다.

+0

OP 코드를 게시하지 않으면 이미 작성한 코드로 끝날 수 있습니다. – alvits

+0

@alvits 그는 나의 접근 방식에 대한 간단한 설명을 제공한다. (grep 출력 파일 만들기, 파일에서 변수 이름 삭제, 파일 삭제) 내 것이 아니다. 우리가 기다리고 보자. – SLePort

관련 문제