나는 이름이 다음 구문에 있는 많은 폴더가 포함된 디렉토리에 있는 특정 폴더를 선택하는 작업을 하고 있습니다. prot_cne_ligNNN(여기서 NNN은 1부터 1000까지의 숫자)
선택한 번호(NNN에 제공됨)의 폴더를 선택한 다음 다른 폴더에 복사하는 bash 스크립트가 필요합니다.
# define the list on numbers, which directories will be coppied
# meaning that I need to take a directory prot_cne_lig331, prot_cne_lig767, prot_cne_lig998
list=['331','767','998']
for system in ${somewhere}/*
system_name=$(basename "$system")
if system_name == '*one_of_the_element_from_the_list*'
cp $system $desired_output_folder
fi
done
따라서 여기에서는 폴더 이름에 목록에 언급된 숫자 중 하나가 포함되어 있는지 확인하는 데 적합한 IF 문을 정확하게 정의해야 합니다.
답변1
디렉토리의 모든 이름을 반복하고 목록에 대해 각각을 테스트하는 것보다 목록을 반복하는 것이 더 쉬운 것 같습니다.
list=( 331 767 998 )
for number in "${list[@]}"; do
cp -r "$somewhere/prot_cne_lig$number" "$destdir"
done
에서 배열을 정의하는 구문을 참고하세요 bash
.
혹은 별도의 배열변수 없이,
for number in 331 767 998; do
cp -r "$somewhere/prot_cne_lig$number" "$destdir"
done
또는 다음을 사용할 수 있습니다.
shopt -s extglob
cp -r "$somewhere"/prot_cne_lig@(331|767|998) "$destdir"
괄호 안의 패턴과 일치하는 @(331|767|998)
확장된 와일드카드 패턴은 어디에 있습니까(so).shopt -s extglob