从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$
Run Code Online (Sandbox Code Playgroud)
有没有办法检查命令的返回值mv -n?
是否可以执行类似于$?了解命令移动文件是否成功(返回 0)或失败(返回 1)的操作,因为目标文件夹中已经存在另一个同名文件?
不,$?不会告诉您该-n选项是否阻止mv执行移动,因为在这种情况下退出状态将为 0。
解决方案1:您可以检查原始文件没有移动...
mv -n file1 file2
[ -e file1 ] && echo "Hmmm, mv didn't have any effect"
Run Code Online (Sandbox Code Playgroud)
但是,如果另一个程序在移动和测试之间同时重新创建 file1,则可能会出现竞争条件。
解决方案 2:由于您似乎使用 GNU mv,因此该-v选项有助于确定移动是否成功
if mv -v -n file1 file2 | grep -q .; then
echo "The move succeeded"
fi
Run Code Online (Sandbox Code Playgroud)
随着-v,如果发生移动,mv将输出renamed 'file1' -> 'file2'。通过管道传输其输出以grep -q .测试是否mv在其标准输出上输出任何内容。
如果出现错误,mv将输出其标准错误,并且grep也会失败。
| 归档时间: |
|
| 查看次数: |
3671 次 |
| 最近记录: |