私は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