移动文件时有一个额外的 > 字符,现在文件夹丢失了

rma*_*man 2 move

我尝试将 Linux 中的文件从一个目录移动到另一个目录,但不小心多了一个 > 字符。

mv /u01/app/oracle/product/12.1.0.2/db_1/dbs/>test2.dbf /u01/shared_data/oradata/TEST/test.dbf
Run Code Online (Sandbox Code Playgroud)

现在,我的整个dbs文件夹都不见了。但是,当我找到该dbs文件夹时,/u01/app/oracle/product/12.1.0.2/db_1/dbs它似乎在那里,但我不能llcd无法找到它:

-bash: cd: /u01/app/oracle/product/12.1.0.2/db_1/dbs: No such file or directory
Run Code Online (Sandbox Code Playgroud)

怎样才能把原来的东西放回原处?

der*_*ert 7

>这里将stdout重定向到一个文件中,就像它会在一个比较正常的使用案例:

printf "%s\n" "hello world" > filename
Run Code Online (Sandbox Code Playgroud)

周围的空格>是可选的,它不必放在最后。这也是一样的:

printf "%s\n">filename "hello world" 
Run Code Online (Sandbox Code Playgroud)

所以你的mv行会更传统地写成:

mv /u01/app/oracle/product/12.1.0.2/db_1/dbs/ /u01/shared_data/oradata/TEST/test.dbf > test2.dbf
Run Code Online (Sandbox Code Playgroud)

它已将您的文件夹重命名为test.dbf(在不同的目录中)并将mv的标准输出(可能什么都没有)写入test2.dbf您的当前目录。希望这不会意外覆盖 Oracle 数据文件。

PS:如果 extra>是一个常见问题,bash 的set -o noclobber/set -C选项至少可以帮助防止覆盖文件。bash的手册页描述为:如果设置,bash将不覆盖与现有的文件>>&<>重定向操作符。在使用重定向运算符>|而不是>.