파일이 많은 폴더가 있습니다 .zip
. 그들의 이름은 다음과 같습니다.
John-Rupert A. Doe_nnnnnnn_assignsubmission_file_*.zip
여기서 n
는 숫자, *
는 문자열, John-Rupert A. Doe
는 공백, 점, 대시를 포함할 수 있는 문자열입니다.
각각에 대해 다음을 수행하고 싶습니다.
디렉터리를 만듭니다. 나는 다음을 통해 이 작업을 수행합니다.
ls | cut -d'_' -f 1 | sed 's/ //g' | tr -d '.' | tr -d '-' | xargs -L 1 mkdir
(그래서 위의 예에 해당하는 디렉토리 이름은
JohnRupertADoe
)이제 이 파일 이름으로
.zip
생성된 디렉터리 에 각 파일을 추출하고 싶습니다..zip
하지만 어떻게?
답변1
당신은 시도 할 수 있습니다:
for z in ./*.zip
do name="${z%%_*}"; dest=".${name//[ .-]/}"; mkdir "$dest"; unzip "$z" -d "$dest"
done
각 z
ip 파일에 대해 이름 부분을 추출한 다음( ${z%%_*}
접미사를 탐욕스럽게 제거) 점, 대시 및 공백( ${name//[ .-]/}
)을 모두 제거하고 결과 문자열을 인수로 전달하여 mkdir
해당 디렉터리를 생성합니다. 그런 다음 지정된 대상에 아카이브를 추출합니다 d
.
답변2
테스트되지 않음:
for i in *.zip; do
zipdir() { echo "$i" | cut -d'_' -f 1 | sed 's/ //g' | tr -d '.' | tr -d '-'; }
zipdir | xargs -L 1 mkdir
mv "$i" "$(zipdir)"/
done
또는 두 파이프를 모두 제거하려면 tr
파이프를 추가할 수 있습니다 sed
(테스트되지 않음).
for i in *.zip; do
zipdir() { echo "$i" | cut -d'_' -f 1 | sed 's/ //g;s/.//g;s/-//g'; }
zipdir | xargs -L 1 mkdir
mv "$i" "$(zipdir)"/
done