为我的管理员提供了一个 shell 脚本来重命名几个文件夹,但由于某种原因,这些文件夹现在名称中包含回车符(该脚本在 UAT 中运行良好,我不太确定这两个环境之间有什么区别。 )如果我的应用程序找不到它,它会创建一个文件夹,所以现在我有两个包含需要合并的文件的文件夹。
所以如果我有文件夹:testfolder\r 和 testfolder,我会如何正确地编写以下命令将所有文件从“CR”文件夹移动到正确的文件夹中,在发生任何文件名冲突时保留正确文件夹的内容?
mv testfolder\r/* testfolder/
答案1
使用 bash(或 ksh 或 zsh)和 GNU mv 作为其-n
或--no-clobber
选项:
for file in testfolder$'\r'/*; do mv -n "$file" testfolder; done
这使用$' ... '
ANSI C 引用获取其中包含回车符的文件夹的名称;剩下的就是一个简单的循环来移动(而不是破坏)文件。