仅当文件存在于 shell 脚本中时才移动
Posted
技术标签:
【中文标题】仅当文件存在于 shell 脚本中时才移动【英文标题】:move only if file exists in a shell script 【发布时间】:2016-01-29 15:02:05 【问题描述】:我想使用mv
重命名文件:
mv src.txt dest.txt
如果文件不存在,我得到一个错误:
mv: cannot stat ‘src.txt’: No such file or directory
如果文件已经存在,我如何使用mv
?
我不想将 stderr 重定向到 dev/null
,因为我想保留发生的任何其他错误
【问题讨论】:
请同时从您的代码中发布相关部分 哦,这还不够,至少,我猜我的解决方案应该适合你。请测试一下。 @Oz123 你还想要什么?谢谢,我当然会。 【参考方案1】:单线:
[ -f old ] && mv old nu
【讨论】:
这是更性感的答案【参考方案2】:你应该测试文件是否存在
if [ -f blah ]; then
mv blah destination
fi
【讨论】:
@Oz123 是迂腐的需要使用[ -r blah ]
,额外检查读取权限
只有 -r 对我有用,即使问题是文件根本不存在。
@SergA,在这种特殊情况下,[ -w blah ]
是否更合适,因为mv
需要对文件的写入权限?
@ghilesZ,实际上不需要检查文件的读写权限。要移动文件您需要有权将其从之前所在的目录中分离出来,并将其附加到您放置它的目录。来自here。
目录使用[ -d myDir ]
。【参考方案3】:
即使找不到文件,这一行返回成功:
[ ! -f src ] || mv src dest
【讨论】:
(如果找不到文件,@mahemoff 的版本返回 false。)以上是关于仅当文件存在于 shell 脚本中时才移动的主要内容,如果未能解决你的问题,请参考以下文章
仅当用户存在于 Firebase 中时 Flutter google 登录?
Zapier Slack 私人频道:仅当用户在频道中时才发送消息