仅当文件存在于 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 私人频道:仅当用户在频道中时才发送消息

shell脚本的调试

仅当表存在时如何删除 Amazon Redshift 中的表

shell 判断一个值是不是存在于一个数值列表