2017-07-07 5 views
1

フォルダ内には、600個のファイルがあり、番号は001から600までです.foo_001.barのように見えます。テキストファイルでは、このフォルダの番号は&です。今私はテキストファイルから対応する001タイトルfoobarとfoo_001.barの名前を変更します。ファイルの名前を変更して、テキストファイルをソースとして使用

しかし、私はLinux Mintでこれを正しく行う方法を手がかりにしていません。誰かが私を助けたり、私に助言を与えることができますか?

titles.txtの内容は次のようになります。数字とタイトルの間にはタブが付いています(もちろん簡単に変更できます)。

001 title of 1 
002 this is 2 
003 and here goes 3 
004 number four 
005 hi this is five 
etc 

フォルダの内容は次のようになります。例外なく。 readを使用してファイルを使用して

file_001.ext 
file_002.ext 
file_003.ext 
file_004.ext 
file_005.ext 
etc 
+0

いくつかのサンプルファイルと名前を変更する方法を教えてください。それは役に立つでしょう – Inian

+0

これらのファイルは 'タイトルの1.ext'、' this is 2.ext'という名前にしたいですか? – Jack

答えて

2

だけループは、それに応じて awk cut(、@Jackありがとう)とmvファイルで区切られた列を取得します。この非常に簡単な実装では、新しい名前を含むテキストファイルが./filenamesにあり、スクリプトがファイルを含むディレクトリから呼び出されたとします。

#!/bin/bash 
while IFS='' read -r line || [[ -n "$line" ]]; do 
     NR=$(echo "$line" | cut -f 1) 
     NAME=$(echo "$line" | cut -f 2) 
     if [ -f "foo_${NR}.ext" ] ; then 
       mv "foo_${NR}.ext" "$NAME" 
     fi 
done < filenames 
+1

私はそれが単なるスタイルだと知っていますが、 'cut -f 1'は' awk -F '\ t' '{print $ 1}'よりずっと簡単です。 – Jack

+0

ありがとうございます!少し変更しましたが、うまくいきました:-)私は何を疑問に思っていましたか、最後にファイル名が記載されていますか?それはそこになければならないが、なぜ? – MatthijsG

+0

実際に読み込むには、 'read'を入力する必要があります。これはファイル 'fileenames'の内容を' while read 'にパイプすることによって行われます。 do ... 'ループを実行します。 –

関連する問題