我尝试将 Linux 中的文件从一个目录移动到另一个目录,结果意外地多了一个 > 字符。
mv /u01/app/oracle/product/12.1.0.2/db_1/dbs/>test2.dbf /u01/shared_data/oradata/TEST/test.dbf
现在,我的整个dbs
文件夹都丢失了。但是,当我找到该dbs
文件夹时/u01/app/oracle/product/12.1.0.2/db_1/dbs
,它似乎在那里,但我不能ll
或无法cd
找到它:
-bash: cd: /u01/app/oracle/product/12.1.0.2/db_1/dbs: No such file or directory
如何将原件恢复到原来的位置?
答案1
这里>
将 stdout 重定向到一个文件,就像在更正常的用例中一样:
printf "%s\n" "hello world" > filename
周围的空格>
是可选的,并且不必放在最后。这也有同样的作用:
printf "%s\n">filename "hello world"
所以你的mv
行会更传统地写成:
mv /u01/app/oracle/product/12.1.0.2/db_1/dbs/ /u01/shared_data/oradata/TEST/test.dbf > test2.dbf
它将您的文件夹重命名为test.dbf
(在不同的目录中)并将mv
的 stdout (可能什么都没有)写入test2.dbf
当前目录中。希望这不会意外覆盖 Oracle 数据文件。
PS:如果 extra>
是一个常见问题,bash 的set -o noclobber
/set -C
选项至少可以帮助防止覆盖文件。 bash 手册页将其描述为:如果设置,bash 不会使用 、 和 重定向运算符覆盖>
现有>&
文件<>
。当使用重定向运算符>|
而不是>
.创建输出文件时,这可能会被覆盖。