1

我是 BASH 的新手,我一直在使用这个脚本和 cron 作业。我最初使用它时遇到了一些麻烦mv,但事实证明它不会与匹配的目录或任何东西合并。所以我被建议使用cp,因为据说它会合并和替换。

/schedule/ = 源目录 /public_html/ = 目标目录

#!/bin/bash

[ignore dot files/hidden files when copying]
cp -a schedule/* public_html/
[empty contents of source directory(schedule/) after copying]

来源:(/schedule/包含文件夹/文件)

/files/
--4.html
--5.html
/assets/
--sitemap.xml

目的地:(/public_html/以前的文件夹已经存在)

/files/
--1.html
--2.html
--3.html
/assets/
--sitemap.xml

最终,我试图找出如何在使用时忽略隐藏文件cp,并在复制后清空源目录。我正在阅读 BASH 参考手册并看到了nullglob,但我不知道这是否应该使用。

谁能提供一个例子或指出我正确的方向?

4

3 回答 3

0

使用您的命令cp -a schedule/* public_html/,您已经完成了任务的第一部分 [复制时忽略点文件],因为如果未设置 GLOBIGNORE变量和dotglob选项,路径名扩展会忽略以 ''.'' 开头的文件名 - 您unset GLOBIGNORE可以确保这一点。

对于第二部分 [复制后清空源目录] 只需附加rm命令:

cp -a schedule/* public_html && rm -r schedule/*

或者

cp -a schedule/* public_html && rm -r schedule/{,.[!.]}*

(如果您也希望删除点文件)。

于 2013-10-30T08:21:57.030 回答
0

您可以使用以下内容find command列出所有非隐藏文件和非空目录:

find /schedule -not -path '*/\.*' -not -empty

现在添加cp

find /schedule -not -path '*/\.*' -not -empty -exec cp -a '{}' /public_html/ \;
于 2013-10-12T06:43:29.523 回答
0

您可以使用正则表达式来捕获所有隐藏的文件和文件夹,并使用!. 然后,您可以列出所有FILES文件并复制和删除文件。

FILES=$(find /PATH/TO/SOURCE/FOLDER \( ! -regex '.*/\..*' \) -type f ) 
for f in $FILES; 
do 
 cp /PATH/TO/SOURCE/FOLDER/$f /PATH/TO/DEST/FOLDER/$f;
 rm /PATH/TO/SOURCE/FOLDER/$f
done

或者,您可以使用mv代替cpand rm

于 2016-01-21T13:08:11.453 回答