为什么cp在一台服务器上显示"is not a directory",在另一台服务器上就没问题

Why cp indicate "is not a directory" on one server and it's okay on another server

当我在我的服务器上执行这个命令时:

cp *index.html saveIndex/$(date +%Y%m%d-%H%M)Index.html

shell表示:

cp: target 'saveIndex/20180110-0934Index.html' is not a directory

但是,这个命令在我的电脑上起作用。

因为您有多个 *index 文件,您的命令如下所示: cp index.html 1index.html bla-blaindex.html saveIndex/20180110-0934Index.html 如果最后一个参数是目录而不是文件名,则可以执行。

您可以或 运行 cp *index.html saveIndex/,或在 date 处添加秒数作为新文件名并创建这样的脚本:

#!/bin/bash
for ifile in *index.html
do
    cp "${ifile}" saveIndex/$(date +%Y%m%d-%H%M%S)Index.html
    sleep 1
done

sleep 1 将允许您获得唯一的名称,但您可以使用您喜欢的任何其他后缀(例如 $RANDOM 或上次 modified/changed 日期,每个文件的索引节点)避免sleep 1等待。

索引节点示例:

#!/bin/bash
for ifile in *index.html
do
    cp "${ifile}" saveIndex/$(stat -c %i "${ifile}")-$(date +%Y%m%d-%H%M%S)Index.html
done