ファイル拡張子に基づいてファイルをソートし、ディレクトリに移動します。

ファイル拡張子に基づいてファイルをソートし、ディレクトリに移動します。

ファイルのさまざまな種類の拡張子を受け入れ、その拡張子からディレクトリを生成するスクリプトがあります。

ただし、3つの拡張タイプのディレクトリを作成するだけです。 JPG/JPEG、DOC/DOCX およびその他のタイプ拡張子が「その他」のディレクトリ 1 つ。

これはこれまで私のスクリプトです。

#!/bin/bash
exts=$(ls | sed 's/^.*\.//' | sort -u)
for ext in $exts; do
  mkdir $ext
  mv -v *.$ext $ext/
done

ベストアンサー1

そしてzsh

#! /bin/zsh -
# speed things up by making mv builtin
zmodload zsh/files

# associative array giving the destination directory for each
# type of file
typeset -A dst=(
  doc  doc
  docx doc
  jpg  jpeg 
  jpeg jpeg
)

# default for files with extensions not covered by $dst above or
# files without extension
default=miscellaneous

mkdir -p $dst $default || exit

for f (*(N.)) mv -i -- $f ${dst[$f:e:l]-$default}/
  • *(N.)隠されていないすべてのアイテムに展開定期的な.現在のディレクトリの files()( Nullglob を使用するため、そのファイルがない場合は空のリストに展開されます)。
  • $f:e:lfはileの拡張であり、小文字eに変換されますl(したがって、両方にFILE.DOCX移動します)。file.docxdoc
  • ${var-default}標準/Bourne演算子で、設定がないdefault場合まで拡張されます(ここでは連想配列要素に適用されます)。$var

zshの組み込み関数はmvこのオプション(GNU拡張)をサポートしていませんが、ループの代わりに-v使用できます。zmv

autoload zmv
zmv -v '*(#qN.)' '${dst[$f:e:l]-$default}/$f'

おすすめ記事