私はディレクトリを持っています:
- 金持ち
- コスト
しかし、次のような名前のディレクトリもあります。
- 呼吸 - 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
コマンドは変換を実行します。この場合、最初の後のすべての項目を空の文字列に置き換えます。