何らかの理由でファイル名にアスタリスクがあります。変更されず、内容は実行されません。

何らかの理由でファイル名にアスタリスクがあります。変更されず、内容は実行されません。

私はCentOS共有サーバー環境とBashを使用しています。

ll "$HOME"/public_html/cron_daily/

インポート:

./
../
-rwxr-xr-x 1 user group 181 Jul 11 11:32 wp_cli.sh*

なぜファイル名の末尾にアスタリスクがあるのか​​わかりません。追加した記憶がなく、変更しようとすると、次のような結果が表示されます。

[~/public_html]# mv cron_daily/wp_cli.sh* cron_daily/wp_cli.sh
+ mv cron_daily/wp_cli.sh cron_daily/wp_cli.sh
mv: `cron_daily/wp_cli.sh' and `cron_daily/wp_cli.sh' are the same file

このエラーは、私のCpanel cronjobが失敗した理由を示している可能性があります。

ここに画像の説明を入力してください。

ファイルを変更したりCpanel cronコマンドを実行したときに私が何か間違っているのでしょうか?どちらの操作も失敗したようです。

答え1

アスタリスクは実際にはファイル名の一部ではありません。ファイルが実行可能でエイリアスにll次のフラグが含まれているために表示されます-F

- F

各ディレクトリパス名の直後にスラッシュ( '/')を、各実行可能ファイルの後にアスタリスク( '*')を、各シンボリックリンクの後にatシンボル( '@')を表示します。各ディレクトリパス名の後には等号( `=')が続きます。シンボリックリンク)、各ソケットの後にはパーセント記号(「%」)、各空白の後にはパーセント記号(「%」)、各FIFO表現の後には縦棒(「%」)があります。


Kusalanandaが述べたように、このようなcronを使用してディレクトリ内のすべてのスクリプトを繰り返すことはできません。実行部分を使用すると、"$HOME"/public_html/cron_daily/実行ディレクトリ(.shだけでなく)内のすべてのスクリプトを呼び出すか、次の説明に従って繰り返すことができます。この投稿

答え2

Jesse_bこの質問はすでに答えられていますが、潜在的な誤解を解決する価値があると思いました。

シェルの文字は、特定の条件下で特別な意味を持ちます。例:|パイプ、>リダイレクト、\エスケープ文字などに使用されます。これらの文字はシェルで文字通り解釈されないため、これを実行するとecho foo>bar端末foo>barに印刷されるのではなくfooファイルにリダイレクトされます。bar

幸いなことに、シェルにはこれらの文字が特別な意味である引用符を失うメカニズムもあります。 POSIXシェルでは3つの引用メカニズムがあります。:

  • バックスラッシュ\:後続の文字のリテラル値は保持されますが<newline>
  • 二重引用符"..."`$および文字を除いて、二重引用符内のすべての文字のリテラル値を保持します\
  • アポストロフィ'...'例外なしで一重引用符内のすべての文字のリテラル値を保持します。

したがって、前の例に従って文字通り印刷するには、foo>bar次のようにします。

  • echo foo\>bar
  • echo "foo>bar"
  • echo 'foo>bar'

アスタリスクは*これらの特殊文字の1つです。パターン一致記号そして使用ファイル名拡張子。つまり、次のコマンドはecho *.txtパターンをパターンと一致するファイルに置き換えます。

あなたの場合はcron_daily/wp_cli.sh*matchしかないので、2つの同じパラメータを見て、cron_daily/wp_cli.shそれmvについて文句を言います。ファイルがないので関係ありませんcron_daily/wp_cli.sh*。ただし、実際のファイルが存在し、パターンcron_daily/wp_cli.sh*に一致できるファイルが多い場合はmv失敗します。

次のシナリオを考えてみましょう。

$ ls -l
total 0
-rw-rw-r-- 1 user group 0 jul 14 12:00 file*
-rw-rw-r-- 1 user group 0 jul 14 12:00 file1
-rw-rw-r-- 1 user group 0 jul 14 12:00 file2
-rw-rw-r-- 1 user group 0 jul 14 12:00 file3

file*引用符なしで名前を変更しようとすると、次のようになります。

$ mv file* new_file
mv: target 'new_file' is not a directory

これは受け取ったパラメータmvなので、new_fileディレクトリが必要なためです。

$ printf '[%s]\n' file* new_file
[file*]
[file1]
[file2]
[file3]
[new_file]

名前を正常に変更するには、file*パラメータを引用する必要があります。

$ mv 'file*' new_file
$ ls -l
total 0
-rw-rw-r-- 1 user group 0 jul 14 12:00 file1
-rw-rw-r-- 1 user group 0 jul 14 12:00 file2
-rw-rw-r-- 1 user group 0 jul 14 12:00 file3
-rw-rw-r-- 1 user group 0 jul 14 12:00 new_file

関連情報