他のディレクトリに基づいてディレクトリ名を作成する

他のディレクトリに基づいてディレクトリ名を作成する

私はディレクトリを持っています:

  • 金持ち
  • コスト

しかし、次のような名前のディレクトリもあります。

  • 呼吸 - Lorem
  • 道路 - 座る

ディレクトリにハイフンがない場合は無視する必要があります。 Mkdir Ipsum\ -\ *Ipsum;

可能ですか?

明確にするために編集:ハイフン付きのディレクトリがある場合は、ハイフンの前の部分に基づいて新しいディレクトリ名を作成し、ハイフンの前の部分を含むすべてのディレクトリをその新しいディレクトリに移動したいと思います。

答え1

bash サブストリング拡張機能を使用できます。

${parameter%%word} は一致するサフィックスパターンを削除します。

for f in *;do
    mv "$f" "${f%% -*}"
done

答え2

はい、可能です。次のコードをfix-dashes.shというファイルに入れます(私はMac OSを使用していますが、他のUnicesでも動作します)。

#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
trap 'IFS=$SAVEIFS' 0
for i in $@
do
  echo Processing $i
  case $i in
    *-*)
      echo "'$i' has a dash"
      destname=$(echo "$i" | sed 's/ -.*//')
      echo mv "$i" $destname
      mv "$i" $destname
      ;;
  esac
done

これにより、ディレクトリbash fix-dash.sh */名が指定したとおりに変更されます。スラッシュは、ディレクトリ名のみを取得できるように重要です。それ以外の場合は、ダッシュを含む一般的なファイルが影響を受けます。

`IFSには単語区切り文字が含まれており、ファイル名にスペースが含まれているため、これを調整する必要があります。

case私はコマンドラインで使用されているREを模倣しているので、限られた正規表現メカニズムを使うのが好きです。bashこの場合、ダッシュを含む名前にのみ名前変更が行われます。

このsedコマンドは変換を実行します。この場合、最初の後のすべての項目を空の文字列に置き換えます。

関連情報