다음 zip 파일이 있습니다.
PLP_633555_2015-03-04_01-12-01.zip
PLP_634562_2004-03-02_02-15-07_UBIC.zip
PLP_563462_2008-05-02_01-21-03_UBIC_STOC.zip
다음 형식을 사용하여 각 zip을 적절한 디렉터리에 추출해야 합니다(기본적으로 처음 30자만 필요합니다).
PLP_633555_2015-03-04_01-12-01
PLP_634562_2004-03-02_02-15-07
PLP_563462_2008-05-02_01-21-03
다음은 현재 가지고 있는 명령입니다. 작동하지만 두 번째 zip 파일(PLP_634562_2004-03-02_02-15-07_UBIC.zip)에만 해당됩니다.
for f in /PLP*.zip; do n=$(echo $f | cut -f 1-5 -d '_'); unzip -d $n $f;done
zip 파일의 처음 30자만 읽고 이를 기반으로 디렉터리를 생성하도록 변경하고 싶습니다. 이를 통해 향후 새로운 zip 파일 명명 형식이 작동할 수 있게 됩니다.
명령의 n 변수 부분을 이것으로 변경해 보았습니다.
n=$(echo ${f:0:30});
그러나 그것은 작동하지 않았습니다. 저는 리눅스 배쉬를 사용하고 있습니다.
답변1
sed
처음 30자를 얻을 수 있습니다 :
sed 's|\(.\{30\}\).*|\1|'
대신 루프 cut
에서 사용하세요 .for
이 교체의 내역은 sed
교체한 사용자 간의 일치입니다. 30개의 단일 문자를 계산합니다(이스케이프 포함).\( \)
\1
{30}
\
.
답변2
여러분의 모든 제안에 감사드립니다. 저는 그 제안을 모두 고려하여 이 명령을 만들었습니다. 내 경우에는 이것이 바로 나에게 필요한 명령이었습니다.
for f in /mydirectory/*.zip; do
n=$(echo ${f##*/} | cut -c1-30);
unzip -d /mydirectory/$n $f;
done
- 모든 zip 파일을 반복합니다.
- 각 zip 파일(파일 이름만, 크기나 경로와 같은 추가 정보 없음)을 에코한 다음 처음 30자만 에코하고 n 변수에 저장합니다.
- 그런 다음 각 zip 파일의 내용을 새 디렉터리에 추출합니다(n 변수 사용).
내 경우에는 다른 디렉터리에서 실행되는 스크립트에 넣었습니다.