2017-11-08 4 views
1

파일 자체를 기반으로 하위 폴더로 이동하는 폴더에 파일 집합이 있습니다. 파일 형식은 다음과 같습니다파일을 예외 폴더로 이동

이름/file.ext를 : 나는 성공적으로 구조를 폴더로 변환 할 수 있었다

for i in `ls | grep _`; do 
    mkdir -p `echo $i | cut -f1 -d "_"` 
    mv $i `echo $i | cut -f1 -d "_"`/`echo $i | cut -f5 -d "_"` 
    mv $i `echo $i | cut -f1 -d "_"`/`echo $i | cut -f4 -d "_"` 
done 

: 코드 줄을 활용

Name_metadata_metadata_File.ext

파일에 추가 문자열이 포함 된 일부 파일 (Name_str_metadata_metadata_File.ext)이 있으며이를 제거하려고합니다. 내 문장에 if 문을 추가하는 문제에 봉착했습니다.

for i in `ls | grep _`; do 
    mkdir -p `echo $i | cut -f1 -d "_"` 
    if `echo $i | cut -f2 -d "_"` == "str"; then 
     mv $i `echo $i | cut -f1 -d "_"`/`echo $i | cut -f5 -d "_"` 
    else 
     mv $i `echo $i | cut -f1 -d "_"`/`echo $i | cut -f4 -d "_"` 
    fi 
done 

if 문을 잘못 쓰고 있습니까?

+0

한 줄에 입력해야합니까? 게다가, 당신은 ls 출력에 의존하면 안된다. –

답변

3

ls의 출력을 의식적으로 구문 분석하지 마십시오 (BashFAQ - Why you shouldn't parse the output of ls(1) 참조). 여러 가지 방법으로 잘못 될 수 있습니다. 이 경우 _입니다 구분 주어진 단어에서 초기 및 먼 문자열을 추출하기위한 매개 변수 확장의 syntices 쉘

for file in *_*; do 
    [ -f "$file" ] || continue 
    mkdir -p "${file%%_*}" || { printf 'error creating dir\n' >&2; exit 1; } 
    mv "$file" "${file%%_*}/${file##*_}" 
done 

"${file%%_*}${file##*_}"에서 지원되는 내장 글로브 확장을 사용합니다. Bash - Parameter expansion - substring removal

관련 문제