由于某种原因,文件名带有星号 - 它不会被更改并且内容不会被执行

由于某种原因,文件名带有星号 - 它不会被更改并且内容不会被执行

我使用 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 来遍历目录中的所有脚本。使用 run-parts,您可以调用"$HOME"/public_html/cron_daily/执行目录中的所有脚本(不仅仅是 .sh)或循环遍历它们,如中所述这个帖子

答案2

杰西_b已经回答了这个问题,但我认为值得解决一些潜在的误解。

shell 中的字符在某些特定条件下具有特殊含义。例如:|用于管道、>重定向、\转义字符等。这些字符不会由 shell 按字面意思解释,所以这就是为什么当您这样做时echo foo>bar,foo>bar不会被打印到您的终端,而是foo会被重定向到bar文件。

幸运的是,shell 还有一种机制可以使这些字符失去其特殊含义:引用。在 POSIX shell 中,有3种报价机制:

  • 反斜杠\保留后续字符的字面值,但<newline>.
  • 双引号"..."保留双引号内所有字符的字面值,但字符`$和除外\
  • 单引号'...'保留单引号内每个字符的字面值,无一例外。

因此,按照前面的示例,如果我们想foo>bar按字面打印,我们可以这样做:

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

星号*是这些特殊字符之一,它是模式匹配符号并用于文件名扩展。换句话说,诸如之类的命令echo *.txt会将模式替换为模式匹配的文件。

在你的例子中,cron_daily/wp_cli.sh*只有 matches cron_daily/wp_cli.sh,所以mv看到 2 个相同的参数并抱怨它。没关系,因为没有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

相关内容