ワイルドカードを使用してmvを呼び出すときにエラーが発生しました。

ワイルドカードを使用してmvを呼び出すときにエラーが発生しました。
#! /bin/bash

error_text=$(tail -n +1 /path/dir/folder/exc/a/update/Abd/ER/* | \
    grep 'Warning\|Loaded\|Event')
echo $error_text

nc 10.10.99.45 25 << EOF
ehlo mail.abc.pvt
mail from: [email protected]
rcpt to: [email protected]
data
subject: errors
$error_text
.
quit
EOF
mv Abc*.err /path/dir/folder/exc/a/update/Abd/ER/BkError/

私が得るエラーは次のとおりです。

mv: cannot stat `ACQ*.err': No such file or directory

ベストアンサー1

ワイルドカードを使用してプログラムを呼び出すと、使用中のシェルはワイルドカードを拡張し、拡張ファイル名を実行可能ファイルの引数として渡そうとします。拡張できない場合、シェルはプロセスにファイル名としてワイルドカード文字を提供します。

次のstrace出力を参照してください(ファイルあり)。

user@host:~$ mv test* /tmp/
execve("/bin/mv", ["mv", "test", "test1", "test2", "test3", "/tmp"], [/* 19 vars */]) = 0

これで、次のものがstrace出力されます(ワイルドカードと一致するファイルは存在しません)。

user@host:~$ mv test* /tmp/
execve("/bin/mv", ["mv", "test*", "/tmp/"], [/* 19 vars */]) = 0

ファイル移動を使用すると、mvプログラムはmv最初にファイルの状態を取得しようとします。これはシステムコールを介して行われますstat(参考資料を参照man 2 stat)。ファイル(またはあなたの場合は複数のファイル)の状態を収集できない場合は、プロセスをmv続行できません。

2番目のケースでは、statシステムコールが失敗します。

lstat("test*", 0x7fff20d26490)          = -1 ENOENT (No such file or directory)

長い話を短く:この文と一致するファイルはありませんACQ*.err

おすすめ記事