-1

我有一个 bash 脚本,其中包含:

for i in $(stuff);
do other-stuff; cp -r $i $p;
done

但我没有特定日志转储文件类型的读取权限,我们称之为 .txt

目前我得到:cp:无法打开`file.txt'进行阅读:权限被拒绝

在不更改任何权限的情况下,是否有一种简单的方法可以复制这些文件以外的所有内容?

4

3 回答 3

1

测试当前用户是否可以读取文件if [ -r "$i" ]

for i in $(stuff);
    if [ -r "$i" ]; do
        cp -r $i $p
    fi
done

更多信息:文件测试运算符


-r
如果...文件具有读取权限(对于运行测试的用户),则返回 true

-w
文件具有写权限(对于运行测试的用户)

-x
文件具有执行权限(对于运行测试的用户)

于 2011-10-21T21:12:27.313 回答
1

cp生成该消息时不会挂起。它只是跳过文件。添加详细(cp -vr $i $p),您会看到它要么忙于复制其他文件,要么脚本中的其他内容挂起。

cp确实没有办法排除其递归的文件。如果你想要这样,你将不得不切换到更有特色的东西,比如tar(可能使用find)或rsync.

此外,您应该真正引用您的论点,以防它们包含空格:cp -r "$i" "$p"

于 2011-10-21T21:14:41.990 回答
0
do other-stuff; $i =~ "*.txt" || cp -r $i $p;

您可能需要在这里分组;我没有检查运算符的优先级,我无法将它们全部记在脑海中。但是~=做一个正则表达式。如果成功,将跳过副本。

于 2011-10-21T21:17:43.247 回答