ファイルが多いフォルダがあります.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