gpt4 book ai didi

shell - 获取命令返回值 "mv -n"linux

转载 作者:行者123 更新时间:2023-12-04 09:14:05 25 4
gpt4 key购买 nike

来自 mv --help

-n, --no-clobber do not overwrite an existing file

user@pc:~/Desktop/test$ ls -l
total 16
-rw-r--r-- 1 user user 0 ago 6 20:28 bla
-rw-r--r-- 1 user user 0 ago 6 20:28 ble
user@pc:~/Desktop/test$ mv -n bla ble
user@pc:~/Desktop/test$

有没有办法检查命令mv -n的返回值?

是否可以做类似于 $? 的操作来了解命令是否成功(返回 0)移动文件或失败(返回 1)因为已经有另一个同名文件在目标文件夹中?

最佳答案

不,$? 不会告诉您 -n 选项是否阻止了 mv 执行移动,因为退出状态将是在这种情况下为 0。


解决方案一:可以查看原始文件没有移动...

mv -n file1 file2
[ -e file1 ] && echo "Hmmm, mv didn't have any effect"

但是,如果另一个程序在移动和测试之间同时重新创建 file1,则可能会出现竞争条件。


解决方案 2:由于您似乎使用 GNU mv,因此 -v 选项有助于确定移动是否成功

if mv -v -n file1 file2 | grep -q .; then
echo "The move succeeded"
fi

使用-v,如果发生移动,mv 将输出renamed 'file1' -> 'file2'。将其输出通过管道传输到 grep -q . 测试 mv 是否在其标准输出上输出任何内容。

如果有错误,mv 将输出标准错误,grep 也会失败。

关于shell - 获取命令返回值 "mv -n"linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63293165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com