![특정 디렉토리의 헤더를 반복하고 삭제합니다.](https://linux55.com/image/135965/%ED%8A%B9%EC%A0%95%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EC%9D%98%20%ED%97%A4%EB%8D%94%EB%A5%BC%20%EB%B0%98%EB%B3%B5%ED%95%98%EA%B3%A0%20%EC%82%AD%EC%A0%9C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
특정 디렉터리를 반복하고 입력 매개변수로 제공된 해당 디렉터리에서 파일의 첫 번째 줄을 삭제하고 싶습니다.
내 입력 매개변수는 다음과 같아야 합니다.
-i [input_directory]
- 루트 디렉토리-n [directory]
파일의 디렉터리를 확인하세요.file ending
다음으로 실행
sh -i /main/folder/ -n (sub1|sub2|sub6) .txt
스크립트는 의 파일 헤더와 그 *.txt
아래의 sub1
폴더 만 삭제해야 합니다.sub2
sub6
/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
그것이 바로 내가 할 일이다. 추가적인 오류 처리가 적절하며 독자의 연습 문제로 남겨두겠습니다.