특정 디렉토리의 헤더를 반복하고 삭제합니다.

특정 디렉토리의 헤더를 반복하고 삭제합니다.

특정 디렉터리를 반복하고 입력 매개변수로 제공된 해당 디렉터리에서 파일의 첫 번째 줄을 삭제하고 싶습니다.

내 입력 매개변수는 다음과 같아야 합니다.

  • -i [input_directory]- 루트 디렉토리
  • -n [directory]파일의 디렉터리를 확인하세요.
  • file ending

다음으로 실행

sh -i /main/folder/ -n (sub1|sub2|sub6) .txt

스크립트는 의 파일 헤더와 그 *.txt아래의 sub1폴더 만 삭제해야 합니다.sub2sub6/main/folder/

이제 모든 폴더를 반복하고 헤더를 제거하는 아래 스크립트가 있지만 지정된 폴더만 반복하는 방법을 잘 모르겠습니다.

for $file in $i/*/*.txt do
    sed '1,1d' $file
done

매개변수 입력 방식을 변경하는 것이 도움이 된다면 알려주시기 바랍니다.

답변1

작업 디렉터리 지정을 허용하는 명령에 대한 내 직관은 이것이 첫 번째 인수라는 것입니다. 명령 스위치가 누락되었을 수도 있지만 -i올바르게 설정한 것입니다.

둘째, 여러 값(예: 검색하려는 여러 특정 하위 디렉터리)이 있는 옵션은 마지막에 배치해야 합니다. 이렇게 하면 그들은 다른 사람들을 너무 많이 방해하지 않습니다.

다음과 같이 명령을 호출하는 것이 좋습니다.

~$ mycommand /my/root/dir "txt" -sdirs sub1 sub2 sub6

Bash에는 주어진 매개변수를 전환할 수 있는 내장 기능이 하나 sh있을 수도 있습니다 . shift다음과 같이 명령줄에서 필요한 정보를 추출할 수 있습니다.

#!/bin/bash

WORK_DIR="$1"
shift # shifts $2 to $1
FILE_END="$1"
shift
if [ "-sdirs" = "$1" ]; then
    shift # get to the sub dirs
    while [ -n "$1" ]; do # tests if there is a sub dir
        # *do your magic here*
        # $1 should be a sub dir
        # $WORK_DIR/$1/*$FILE_END for example

        # to the next one, break if nothing left
        shift || break
    done
else
    echo "No sub directories specified"
    exit 1
fi

그것이 바로 내가 할 일이다. 추가적인 오류 처리가 적절하며 독자의 연습 문제로 남겨두겠습니다.

관련 정보