将没有文件扩展名的文件复制到新文件夹并重命名

时间:2016-02-15 10:33:12

标签: shell zsh

我在周末期间决定试用zsh,并对它有一点乐趣。不幸的是,我一般都是shell脚本的新手。

我有一个文件夹,文件名是一个没有文件扩展名的哈希值(4667e85581f80b6936f8811f0a7493c70eae4ee7)。

我想要做的是将此文件复制到另一个文件夹并将其重命名为“screensaver.png”。

我尝试过使用以下代码:

#!/usr/bin/zsh

KUVVA_CACHE="$HOME/Library/Containers/com.kuvva.Kuvva-Wallpapers/Data/Library/Application Support/Kuvva"
DEST_FOLDER="/Library/Desktop Pictures/Kuvva/$USERNAME/screensaver.png"

for wallpaper in ${KUVVA_CACHE}; do
    cp -f ${wallpaper} ${DEST_FOLDER}
done

这会返回以下错误:

cp: /Users/Morten/Library/Containers/com.kuvva.Kuvva-Wallpapers/Data/Library/Application Support/Kuvva is a directory (not copied).

当我尝试回显$ wallpaper变量而不是做“cp”时,它只是回显文件夹路径。

文件名每6小时更改一次,这就是我正在进行for循环的原因。所以我永远不知道该文件的名称是什么,但我知道该文件夹中始终只有一个文件。

我有什么想法可以做到这一点? :)

非常感谢!

  • 的Morten

1 个答案:

答案 0 :(得分:1)

它应该使用常规文件名扩展(globbing)。

KUVVA_CACHE="$HOME/Library/Containers/com.kuvva.Kuvva-Wallpapers/Data/Library/Application Support/Kuvva/"

然后复制

cp -f ${KUVVA_CACHE}/* ${DEST_FOLDER}

您可以将脚本添加到crontab,以便以一定的时间间隔运行。使用'crontab -e'编辑并添加

30 */3 * * * /location/of/your/script

这将每隔三小时运行一次。第一个数字是分钟。星号表示任何。按转义键退出编辑器,然后按+:键入wq并按Enter键。这些vi命令。

不要忘记'chmod 0755 file-name'脚本,使其成为可执行文件。

这是脚本。

#!/bin/zsh

KUVVA_CACHE="$HOME/Library/Containers/com.kuvva.Kuvva-Wallpapers/Data/Library/Application Support/Kuvva"
DEST_FOLDER="/Library/Desktop Pictures/Kuvva/$USERNAME/screensaver.png"

cp "${KUVVA_CACHE}/"* "${DEST_FOLDER}"
相关问题