CSVファイルの検索と名前変更に関するスクリプトの質問

CSVファイルの検索と名前変更に関するスクリプトの質問

CSVファイルが存在するかどうかを最初にテストするスクリプトを作成しようとしています。見つかったら、名前を Listing.txt に変更します。

これが私が持っているものですが、うまくいきません。

if [ -f "*.csv" ];
   then
   cp *.csv listing.txt
fi

ベストアンサー1

*.csv既存のコードは、名前が文字通りのファイルが存在するかどうかをテストします。それがうまくいかない理由です。これは*二重引用符の中に入れて行われます。

[ -f *.csv ]このパターンに一致するファイルが複数ある場合、使用すると期待どおりに動作しません。一致するファイルが複数ある場合、ディレクトリ名でないと*.csvコマンドcpは正しく機能しません。listing.txt

名前変更最初*.cvsファイル名ワイルドカードパターンと一致する現在のディレクトリのファイルに対して、次の操作を行います。

#!/bin/sh

set -- *.csv

while [ "$#" -gt 0 ] && [ ! -f "$1" ]; do
    shift
done

if [ -f "$1" ]; then
    mv -- "$1" listing.txt
fi

これはまず、位置引数などを$1現在のディレクトリで$2一致するすべての名前に設定します。*.csv次に、一致する名前の一般ファイルの最初の一般ファイルまたはシンボリックリンクを探し始めます(コードは*.csvglob可能ディレクトリ名などに展開されます。)通常のファイルまたはファイルへのシンボリックリンクが見つかった場合は、ファイル名がlisting.txt

zshシェルから:

mv -- *.csv(-.[1]) listing.txt

これは、ワイルドカードパターンにワイルドカード修飾子を使用して、パターンと一致する*.csv最初の一般的なファイルまたはシンボリックリンクを返します。

おすすめ記事