私のファイルをインポートして名前を変更するスクリプトを作成しようとしています。PT-1到着ポイント2 例えば。スクリプトはtestfile_pt-1_date.tsファイルの名前を正しく変更し、それを指定されたフォルダに正しくコピーします。
私が持っている問題は、たとえばファイルがある場合です。 testfile_pt_date.ts、ファイル名は変更されませんでしたが、コピーされました。これは私が望むものではありません。ファイルを無視したいです。 for doループがファイルを受け入れる理由がわかりません。指す私がどこに間違っているのか知っている人はいますか?
#! /bin/bash
file=$1
for file in *_pt-1_*.ts
do
echo "$1"
a="$(echo $1 | sed s/_pt-1_/_pt2_/)"
cp "$1" "$HOME/SGTV/${a##*/}"
echo "$a"
done
答え1
ループの代わりに専用ツールを使用することをお勧めしますrename
。読みやすく、書き込みが速く、混乱を防ぎます。
rename 's/_pt-1_/_pt2_/' *_pt-1_*.ts
警告:rename
はい混乱ほとんどのディストリビューションで。 Debianまたはその派生製品を使用している場合は、パッケージ(バイナリだけでなく)がインストールされていることをrename
確認してください。rename