sedとcsvを使用してファイル名を変更する方法

sedとcsvを使用してファイル名を変更する方法

私はLinuxに初めて触れましたが、sed新しいawkアイデアに挑戦することを気にしません。つまり、すべてのファイルにaを追加または削除するなど、一般的なイベントを使用してrename処理sedする目的と方法を理解します$date_1234ところで、ファイル形式以外には、互いに関係のない100個のファイル名を変更する方法を知りたいです。

名前変更の例:

  • 以前の名前であるalpha.aiがomega.aiに名前が変更されました。
  • 以前の名前Pie32.aiがapple.aiに変更されました。
  • 以前の名前はxmas.aiで、名前はsanta.aiに変更されました。

最初は、bashスクリプトを使用してすべての名前を.csvファイルに抽出し、それを列Aに入れました。 BI列に新しい名前を書き込みます。では、一般的なイベントは発生しませんsed

#!/bin/bash
for i in *.ai
do
        mv $i $(echo $i | sed "a1,b1")

done

ベストアンサー1

次のファイルがある場合:

old_name1, new_name1
old_name2, new_name2
old_name3, new_name3

汚い小さなトリックをすることができます。

sed 's/^/mv -vi "/;s/, /" "/;s/$/";/' < names.csv | bash -

sed コマンド (セミコロンで区切られます) は、次のことを行います (置換のsため/に区切り文字として別​​の文字を使用することができ、@よく使用されます)。

  • s/^/mv -vi "/mv -vi "-各行の先頭に追加します(^行の先頭)。
  • s/, /" "/- カンマの後にスペースが続くこと" "。に変更します。
  • s/$/";/- すべての行に二重引用符を追加します($行の終わりを示します)。

したがって、出力はsed次のようになります。

mv -vi "old_name1" "new_name1"
mv -vi "old_name2" "new_name2"
mv -vi "old_name3" "new_name3"

処刑される予定ですbash。ファイル名の周りの引用符は必須ではなく、ファイル名から可能なすべてのスペースを保護するだけです(ただし、カンマの後のスペースは区切り文字として使用されるため、それは役に立ちません)。何が間違っているか、何が起こっているのかを知っていることを示している指示は、すでに-v存在しているファイルを上書きするように求められます。mv-i

おすすめ記事