带有特殊字符的 Bash 副本

发布于 2025-01-06 06:50:41 字数 370 浏览 0 评论 0原文

我在 tmp 目录中有一个名为 Test_File@!@#~:"_1328853976191.txt

我正在运行以下代码

#!/bin/sh


for f in /tmp/*.azw2; do
   if [ -f "$f" ]; then
      cp "$f" /some/directory
   fi

done

它会抛出错误

cp: 无法删除 '/some/directory/Test_File@!@#~:"_1328853976191.txt' :没有这样的文件或目录

如果目标是 / 或根目录下的目录,但不在任何 2 级深度的目录中,则此方法有效。

我该如何解决这个问题?

I have a file named Test_File@!@#~:"_1328853976191.txt in tmp directory

I am running the following code

#!/bin/sh


for f in /tmp/*.azw2; do
   if [ -f "$f" ]; then
      cp "$f" /some/directory
   fi

done

It throws error

cp: cannot remove '/some/directory/Test_File@!@#~:"_1328853976191.txt': No such file or directory

This works if destination is either / or a directory under root, but not in any directory 2 level deep.

How can I fix this issue?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤千羽 2025-01-13 06:50:41

我没有完整的解释,但文件名中的感叹号让我认为关闭历史扩展(使用 set +H)可能会有所帮助。

I don't have a complete explanation, but the exclamation point in the file name makes me think that turning history expansion off (using set +H) might help.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文