ディレクトリ名とサブディレクトリ名のすべての点を繰り返し空白に置き換えます。

ディレクトリ名とサブディレクトリ名のすべての点を繰り返し空白に置き換えます。

Bashを使用して、ディレクトリ名とサブディレクトリのすべての点を空白に変更しようとします。

例: ディレクトリ目次1.3 なります目次 1 3

これまで私のスクリプトは次のようになりました。

#!/bin/bash    
for dir in *\ -\ *; do

      [[ -d "$dir" ]] || continue   # skip if not a directory
      sub="${dir#* - }"
      if [[ ! -e "$sub" ]]; then
        mv "$dir" "$sub"
        mv echo "$(echo "Result: ${dir%.*}" | sed 's/\./ /g').${dir##*.}"

      fi
done

ベストアンサー1

使用find:

find . -mindepth 1 -type d -name "*.*" -exec bash -c '
  for ((i=$#;i>0;i--)); do
    dir=${!i}
    newdir=$(dirname "$dir")/$(basename "$dir" | tr -s "." " ")
    if [ -e "$newdir" ]; then
      echo "skipping \"$dir\", \"$newdir\" already exists" >&2 
    else
      mv "$dir" "$newdir"
    fi
  done
' bash {} +

*.*パターンを使用して現在のディレクトリのすべてのディレクトリ名を再帰的に探します-mindepth 1。見つかったディレクトリのリストは-execbash スクリプトに渡され、その引数は for ループで逆順に処理されます(より深いレベルのサブディレクトリが最初に表示されます)。

新しいディレクトリ名はdirnameその合計に基づいて生成されますbasename。後者は、tr複数の点が単一の空白文字に変わるところで修正されます(-s複数の点を複数の空白に置き換えるにはオプションを削除してください)。新しいディレクトリ名がすでに存在する場合は、エラーメッセージを印刷または移動します。

おすすめ記事