2017-09-09 21 views
1

とファイル名を変更し、私は、CSVファイルのリストを含むディレクトリを持っているがUNIXの場合:ファイル名の一部を抽出し、新しい名前

short-books-for-sale.csv 
old-books-for-sale.csv 
random-books-for-sale-new.csv 

、すなわち私は、内のすべてのファイル名を変更するには、UNIXのコマンドを使用しますディレクトリ。ファイルの名前を変更するときに、私は単語 "books"の後にすべてを削除したいと思います。 出力は次のようなものになります。

short-books.csv 
old-books.csv 
random-books.csv 

これは私がこれまで行ってきたが、そのが正常に動作しないものですが。あなたがawk -F'books' '{print FILENAME}' "$f"またはmv "$f" "$f"が何だろうと思ったが、彼らが実際に行うことは何であるか

for f in *.csv; do 
awk -F'books' '{print FILENAME}' "$f"; 
mv "$f" "$f"; 
done 

答えて

2

わからない:

awk -F'books' '{print FILENAME}' "$f" 

=>ファイルには、線での「$ F」ラインは、のすべての発生時に各ラインを分割読みますbooksとそれ以上は何もしませんが、代わりに "$ f"のすべての行に1回 "$ f"の値を表示します。

mv "$f" "$f" 

=>ファイル "$ f"を自分自身に移動しようとします。それは意味をなさないので、明らかにエラーメッセージを生成します。

これを試してみてください:

for f in *books-*.csv; do 
    echo mv -- "$f" "${f/books-*./books.}" 
done 

あなたはそれだけになるようにテストを完了したらechoを削除します。

for f in *books-*.csv; do 
    mv -- "$f" "${f/books-*./books.}" 
done 
0

prenameで(Perlは名前の変更)ワンライナー(サポートされている場合) :

prename 's/books[^.]+/books/' *.csv 
関連する問題