bash脚本..复制文件而不覆盖[关闭]

2024-02-06

我想知道是否可以根据原始名称将文件复制/移动到目的地。

基本上,我有一个 /mail 文件夹,其中有几个子文件夹,例如 cur 和 new 等。然后我在 /mail/home/username 中有一个提取的备份,该备份是重复的。 mv -f 将不起作用,因为我无权覆盖目录,而只能覆盖其中的文件。

我收到诸如 mv: 无法覆盖目录 `/home/username/mail/username.com' 之类的错误

我想要做的是将 username.com 目录中的每个文件移动到 /mail 中的同名文件夹中。可以有任意数量的文件夹来代替 username.com,并具有自己的单独子目录。

做这个的最好方式是什么?

我必须这样做,因为由于情况我只能通过 php 通过 ftp 和 bash 访问我的主机。

编辑:澄清

我想我有必要澄清一下发生了什么。我位于共享主机上,显然没有对目录本身的写访问权限。至少主要的如mail和public_html。我用 tar 备份了 ~/mail ,但是当尝试将其提取到 ~/mail/home/mail 等时,因为我忘记了完整路径。现在,我不能简单地解压,因为路径错误,并且我不能 mv -f 因为我只有文件的写访问权限,而不是目录。


对于复制,您应该考虑使用cpio在“通过”模式下(-p):

cd /mail; find . -type f | cpio -pvdmB /home/username/mail

The -v是为了详细;-d根据需要创建目录;-m保留文件的修改时间;-B意味着使用更大的块大小,这里可能无关紧要(它曾经在弄乱磁带设备时产生影响)。此列表中省略的是-u进行无条件复制、覆盖目标区域中预先存在的文件的标志。这cd命令确保路径名正确;如果你刚刚这样做:

find /mail -type f | cpio -pvdmB /home/username

你会得到相同的结果,但这只是巧合 - 因为下面的子目录/home/username与原始的绝对路径名相同。如果您需要这样做:

find /var/spool/mail -type f | cpio -pvdmB /home/username/mail

然后可以在下面找到复制的文件/home/username/mail/var/spool/mail,这不太可能是您想要的。

您可以使用 (GNU) 实现类似的效果tar:

(cd /mail; tar -cf - . ) | (cd /home/username/mail; tar -xf - )

这会复制目录,而不仅仅是文件。为此,您需要仅 GNU 的工具:

(cd /mail; find . -type f | tar -cf - -F - ) | (cd /home/username/mail; tar -xf - )

第一个单独的破折号意味着“写入标准输出”;第二个意思是“从标准输入读取”; “-F”选项表示“读取文件名以从指定文件中复制”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

bash脚本..复制文件而不覆盖[关闭] 的相关文章

  • bash while 循环的布尔表达式中的 -lt 意味着什么?

    我猜测它代表小于基于输出 但是我在哪里可以找到有关此语法的文档 bin bash COUNTER 0 while COUNTER lt 10 do echo The counter is COUNTER let COUNTER COUNTE
  • BASH:输入期间按 Ctrl+C 会中断当前终端

    我的 Bash 版本是 GNU bash version 4 3 11 1 release x86 64 pc linux gnu 我有一段这样的代码 while true do echo n Set password read s pas
  • 用于编译和运行 C++ 的 bash 脚本

    我正在尝试进入 C 但必须使用冗长的命令通过命令行运行东西很烦人 所以我想制作一个 bash 脚本来简化过程并运行这些命令 bin bash if 1 start then cd CCPP cd HelloWorld g Wall W We
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire
  • grep 排除文件的数组参数

    我想从我的文件中排除一些文件grep命令 为此我使用参数 exclude excluded file ext 为了更容易阅读 我想使用包含排除文件的 bash 数组 EXCLUDED FILES excluded file ext 然后将
  • Slurm:提交到多个节点时出错(“slurmstepd:错误:execve():python:没有这样的文件或目录”)

    我有一个 bash 脚本submit sh用于向 Slurm 服务器提交训练作业 其工作原理如下 正在做 bash submit sh p1 8 config file 将提交一些对应的任务config file至 8 个 GPU 分区p1
  • 运行具有外部依赖项的 Scala 脚本

    我在 Users joe scala lib 下有以下 jar commons codec 1 4 jar httpclient 4 1 1 jar httpcore 4 1 jar commons logging 1 1 1 jar ht
  • 如何制作 Bash 脚本来查找项目中未使用的图像?

    如何制作一个 Bash shell 脚本 它可以识别所有 jpg gif 和 png 文件 然后识别文件夹中任何文本文件中哪些文件未通过 url href 或 src 链接 这就是我开始的 但我最终得到了与我想要的相反的结果 我不想知道引用
  • 使用 SIGINT 默认处理程序时从 system() 返回值

    我遇到了一些奇怪的返回值system 当子进程从终端接收到 SIGINT 时 解释一下 从 Perl 脚本parent pl I used system 运行另一个 Perl 脚本作为子进程 但我还需要通过 shell 运行子进程 所以我使
  • Bash while 循环等待任务完成

    我创建了一个 bash 脚本来处理文件夹及其子文件夹中的视频 find type f name mkv while read file do ffmpeg i file done 问题 它不是 while 循环等待 ffmpeg 完成 而是
  • 如何使用bash脚本获取分区的偏移量?

    我可以用parted找出我的图像的偏移量 sudo parted s image img unit B print Model file Disk home user image img 107374182400B Sector size
  • 添加文件时运行 shell 命令

    我的 Linux 机器上有一个名为 images 的文件夹 该文件夹连接到一个网站 该网站的管理员可以向该网站添加图片 但是 当添加图片时 我想要一个命令来运行调整目录中所有图片的大小 简而言之 我想知道当新文件添加到特定位置时如何使服务器
  • 检查 Git 中是否需要 pull

    如何检查远程存储库是否已更改并且需要拉取 现在我使用这个简单的脚本 git pull dry run grep q v Already up to date changed 1 但它比较重 有没有更好的办法 理想的解决方案是检查所有远程分支
  • 终端关闭时 bash 收到的信号

    使用 trap 来捕获信号 如下所示 i 1 while i lt 33 do trap echo i gt gt log txt i done 并强行关闭终端 那么log txt中的内容就是 redhat linux下 1 18 1 17
  • 如何在 *nix 中登录时运行脚本?

    我知道我曾经知道如何做到这一点 但是 如何在 unix 中登录时运行脚本 bash 可以 From 维基百科 Bash http en wikipedia org wiki Bash 28Unix shell 29 当 Bash 启动时 它
  • 如何检查主机是否在您的known_host ssh中

    我的脚本中使用以下命令 将主机添加到 ssh 中的已知主机 VAR2 expect c spawn ssh o StrictHostKeyChecking no REMOTE HOST USER REMOTE HOST IP expect
  • Bash 中单行 while 循环的语法

    我无法找到分号和 或大括号的正确组合 我想这样做 但作为命令行中的一句 while 1 do foo sleep 2 done while true do foo sleep 2 done 顺便说一句 如果您在命令提示符下将其输入为多行 如
  • 替换多个文件中的多个字符串

    我有一个包含正则表达式列表和替换文字字符串的文件 格式如下 OLD REGEXP 1 NEW STRING 1 OLD REGEXP 2 NEW STRING 2 我想替换所有匹配的字符串OLD REGEXP X with NEW STRI
  • 从 bash 变量中删除空格

    假设一个变量包含空格 换行符和制表符 后跟一些文本 为什么会这样 var var space strip var of everything but whitespace then remove what s left i e the wh
  • 如何wget目录中最新的文件

    我想编写一个 bash 脚本来下载并安装最新的每日构建程序 RStudio 是否有可能使wget仅下载目录中最新的文件http www rstudio org download daily desktop http www rstudio

随机推荐