zipファイル名から取得したディレクトリ名を使用して、.zipファイルのリストを各新しいディレクトリに抽出します。

zipファイル名から取得したディレクトリ名を使用して、.zipファイルのリストを各新しいディレクトリに抽出します。

ファイルが多いフォルダがあります.zip。彼らの名前は次のとおりです。

John-Rupert A. Doe_nnnnnnn_assignsubmission_file_*.zip

ここでn、数字、*文字列、John-Rupert A. Doeスペース、ドット、ダッシュを含めることができる文字列です。

それぞれについて次のことをしたいと思います。

  1. ディレクトリを作成します。私は次のようにこれを行います。

    ls | cut -d'_' -f 1 | sed 's/ //g' | tr -d '.' | tr -d '-' | xargs -L 1 mkdir
    

    (だから上記の例に対応するディレクトリ名はJohnRupertADoe

  2. これで、このファイル名で.zip作成されたディレクトリに各ファイルを抽出したいと思います。.zipしかし、どのように?

答え1

あなたは試すことができます:

for z in ./*.zip
do name="${z%%_*}"; dest=".${name//[ .-]/}"; mkdir "$dest"; unzip "$z" -d "$dest"
done

zipファイルの名前部分を抽出し(${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

関連情報