我有一个 bash 脚本,其中包含:
for i in $(stuff);
do other-stuff; cp -r $i $p;
done
但我没有特定日志转储文件类型的读取权限,我们称之为 .txt
目前我得到:cp:无法打开`file.txt'进行阅读:权限被拒绝
在不更改任何权限的情况下,是否有一种简单的方法可以复制这些文件以外的所有内容?
测试当前用户是否可以读取文件if [ -r "$i" ]
:
for i in $(stuff);
if [ -r "$i" ]; do
cp -r $i $p
fi
done
更多信息:文件测试运算符
-r
如果...文件具有读取权限(对于运行测试的用户),则返回 true
-w
文件具有写权限(对于运行测试的用户)
-x
文件具有执行权限(对于运行测试的用户)
cp
生成该消息时不会挂起。它只是跳过文件。添加详细(cp -vr $i $p
),您会看到它要么忙于复制其他文件,要么脚本中的其他内容挂起。
cp
确实没有办法排除其递归的文件。如果你想要这样,你将不得不切换到更有特色的东西,比如tar
(可能使用find
)或rsync
.
此外,您应该真正引用您的论点,以防它们包含空格:cp -r "$i" "$p"
do other-stuff; $i =~ "*.txt" || cp -r $i $p;
您可能需要在这里分组;我没有检查运算符的优先级,我无法将它们全部记在脑海中。但是~=
做一个正则表达式。如果成功,将跳过副本。