ファイル名に..(2つのピリオド)を含む数百のファイル名を変更し、..を-(ハイフン)に変更するには、renameコマンドを使用する必要があります。ピリオドが含まれているという事実は、 rename コマンドを混同しているようです。
以下は、いくつかのファイル名の例です。
20180201_190000_TX_AJAX..HHE_instrument_0456
20180201_190000_TX_AJAX..HHN_instrument_0456
20180201_190000_TX_AJAX..HHZ_instrument_0456
リンクされているように見えるように、このファイルの名前を変更する必要があります。
20180201_190000_TX_AJAX-HHE_instrument_0456
20180201_190000_TX_AJAX-HHN_instrument_0456
20180201_190000_TX_AJAX-HHZ_instrument_0456
このコマンドは次のとおりです。
rename 's/../-/' *
結果は次のファイル名です。
-180201_190000_TX_AJAX..HHE_instrument_0456 -180201_190000_TX_AJAX..HHN_instrument_0456 -180201_190000_TX_AJAX..HHZ_instrument_0456
サイクルには特別な目的があるようで混乱しています。それからこれを試しました。
rename 's/..H/-H/' *
例のAJAXは1つのサイトを表し、これらのサイトは異なります。上記の構文は機能し、「20180201_190000_TX_AJAX-HHE_instrument_0456」を生成します。これは多くのステーションで予想されますが、他のステーションでは予期しない結果です。
20180201_000000_SA.AKHBR..HNE_instrument_0542 renamed as 20180201_000000_SA.-HBR..HNE_instrument_0542
20180201_000000_SA.KSHB4..HHE_instrument_0935 renamed as 20180201_000000_SA.-HB4..HHE_instrument_0935
20180201_000000_SA.HTM01..HHE_instrument_0933 renamed as 20180201_000000_S-HTM01..HHE_instrument_0933
文字Hを含む放送局はすべて混乱しているようです。
ちなみに、AJAXはサイトコードで、サイトコードの長さは4〜5文字です。
次に私はこれを試しました:
rename ‘s/SA.????..H/SA.????-H/ * -n
ただし、これを行うとエラーが発生します。
"Nested quantifiers in regex; marked by <-- HERE in m/SA.??? <-- HERE ?..H/ at (eval 1) line 1."
だからワイルドカードが好きではないと思います。
あなたが提供できる助けに感謝します。
答え1
答え2
ドットはすべての文字と一致するため、ダブルポイントはファイル名の最初の2文字と一致するため、これらの文字はダッシュに置き換えられますrename
。正規表現で各点をエスケープするか、\.
ループを使用します(これについて書かれていますbash
)。
for name in ./*..*; do
newname=${name/../-}
printf 'Would move %s to %s\n' "$name" "$newname"
# mv -i "$name" "$newname"
done
一度実行して正しい内容が出力されていることを確認し、削除してやり直し#
てください。
このループは、2 つの連続したポイントを含む現在のディレクトリのすべての名前を繰り返します。パラメータ${name/../-}
置換は、2つの連続した点が最初に表示されることをダッシュで置き換えます。これはシェルファイル名のグロービングパターンなので、ドットはある意味特別ではありません。