ファイルのさまざまな種類の拡張子を受け入れ、その拡張子からディレクトリを生成するスクリプトがあります。
ただし、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()(N
ullglob を使用するため、そのファイルがない場合は空のリストに展開されます)。$f:e:l
f
はileの拡張であり、小文字e
に変換されますl
(したがって、両方にFILE.DOCX
移動します)。file.docx
doc
${var-default}
標準/Bourne演算子で、設定がないdefault
場合まで拡張されます(ここでは連想配列要素に適用されます)。$var
zsh
の組み込み関数はmv
このオプション(GNU拡張)をサポートしていませんが、ループの代わりに-v
使用できます。zmv
autoload zmv
zmv -v '*(#qN.)' '${dst[$f:e:l]-$default}/$f'
答え2
で次のことを試すことができますbash
。正規表現のバイナリ演算子=~
:
# create an array of "known" extensions
known_ext=(jpg jpeg doc docx)
# loop over the files
for f in *; do
# if not a file keep looping
[ ! -f "$f" ] && continue
# if file has a known extension
if [[ " ${known_ext[@]} " =~ " ${f##*.} " ]]; then
# create the dir if not exists
mkdir -p "${f##*.}" &&
# and move the file to that dir
mv -- "$f" "${f##*.}"
else
# else create dir miscellaneous if not exists
mkdir -p miscellaneous &&
# move the file
mv -- "$f" miscellaneous
fi
done
答え3
次のコマンドを実行します。
mkdir miscellaneous doc jpg
find . -maxdepth 1 -type f \( -name "*.doc" -o -name "*.docx" \) -exec mv -v {} doc/ \;
find . -maxdepth 1 -type f \( -name "*.jpg" -o -name "*.jpeg" \) -exec mv -v {} jpg/ \;
find . -maxdepth 1 -type f -exec mv -v {} miscellaneous/ \;
次のテストでは、目的の方法で動作していることを確認できます。
touch foo.mp3 foo.mp4 foo.doc foo.docx foo.jpg foo.jpeg foo.png foo
上記のコマンドを実行し、tree
ファイルがどのように移動されるかを確認します。
tree
.
├── doc
│ ├── foo.doc
│ └── foo.docx
├── jpg
│ ├── foo.jpeg
│ └── foo.jpg
└── miscellaneous
├── foo
├── foo.mp3
├── foo.mp4
└── foo.png
3 directories, 8 files