#!/usr/bin/env bash
shopt -s extglob # Enable extended globbing syntax
for path in "$1"/*; do
file=${path##*/} # Trim directory name
file=${file##+([[:space:]])} # Trim leading spaces
file=${file%%+([[:space:]])} # Trim trailing spaces
if [[ $file != "${path##*/}" ]]; then # Skip files that aren't changed
mv -- "$path" "$1/${file}"
fi
done
注:
- シェルは(例えばextglobbingと
[[ ]]
など)の拡張機能が利用可能であることを保証するために、bash
、ないsh
で起動する必要があります。
dirname
に電話する必要はありません。私たちは常にディレクトリ名を知っているからです。それは$1
です。
extglob
構文は正規表現に匹敵するパワーを持つように正規グロブ表現を拡張します。 +([[:space:]])
は "1つ以上のスペース"のextglobですが、${var%%pattern}
と${var##pattern}
は、変数の値の前または後ろからそれぞれpattern
にできるだけ多くの文字を削除します。
- ファイル名を変更する必要がない場合は
mv
を実行する必要はありません。最初にチェックすることで少し最適化することができます。
これは不明ですが、あなたはファイル*の内容*ではなくファイル*の名前について話していると思います。 (再帰的な検索が必要な場合を除いて) 'for'または' while'ループ、 '-maxdepth 1'を使って' find'を使うことができます。また、bashを使用しているので、パラメータ拡張を使用して、後ろに空白があります。 –