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
次に、一致する名前の一般ファイルの最初の一般ファイルまたはシンボリックリンクを探し始めます(コードは*.csv
glob可能ディレクトリ名などに展開されます。)通常のファイルまたはファイルへのシンボリックリンクが見つかった場合は、ファイル名がlisting.txt
。
zsh
シェルから:
mv -- *.csv(-.[1]) listing.txt
これは、ワイルドカードパターンにワイルドカード修飾子を使用して、パターンと一致する*.csv
最初の一般的なファイルまたはシンボリックリンクを返します。