Bash で一連のパッケージの名前を変更して、バージョン番号を削除するにはどうすればよいですか? 私は と の両方expr
をいじっていましたが、役に立ち%%
ませんでした。
例:
Xft2-2.1.13.pkg
になるXft2.pkg
jasper-1.900.1.pkg
になるjasper.pkg
xorg-libXrandr-1.2.3.pkg
になるxorg-libXrandr.pkg
Bash で一連のパッケージの名前を変更して、バージョン番号を削除するにはどうすればよいですか? 私は と の両方expr
をいじっていましたが、役に立ち%%
ませんでした。
例:
Xft2-2.1.13.pkg
になるXft2.pkg
jasper-1.900.1.pkg
になるjasper.pkg
xorg-libXrandr-1.2.3.pkg
になるxorg-libXrandr.pkg
bashのパラメーター拡張機能を使用できます
for i in ./*.pkg ; do mv "$i" "${i/-[0-9.]*.pkg/.pkg}" ; done
スペースを含むファイル名には引用符が必要です。
私はこのようなことをします:
for file in *.pkg ; do
mv $file $(echo $file | rev | cut -f2- -d- | rev).pkg
done
すべてのファイルが現在のディレクトリにあると仮定します。そうでない場合は、上記の Javier のアドバイスに従って find を使用してみてください。
編集: また、このバージョンは、上記の他の機能と同様に、bash 固有の機能を使用しないため、移植性が向上します。
これは、
.pkg を剥ぎ取り、次に剥ぎ取ります -..
for x in $(ls); do echo $x $(echo $x | sed 's/\.pkg//g' | sed 's/-.*//g').pkg; done
この答えをありがとう。私も何かしらの問題を抱えていました。.nzb.queued ファイルを .nzb ファイルに移動します。ファイル名にスペースやその他の問題があり、これで問題が解決しました。
find . -type f -name "*.nzb.queued" |
sed -ne "s/^\(\(.*\).nzb.queued\)$/mv -v \"\1\" \"\2.nzb\"/p" |
sh
Diomidis Spinellis の回答に基づいています。
正規表現は、ファイル名全体に対して 1 つのグループを作成し、.nzb.queued の前の部分に対して 1 つのグループを作成してから、シェル移動コマンドを作成します。引用された文字列で。これは、sed によって既に行われているため、シェル スクリプトでのループの作成も回避します。