![为 2000 多个具有增量名称的文件夹创建循环,以压缩到具有相同增量名称的存档中](https://linux22.com/image/180815/%E4%B8%BA%202000%20%E5%A4%9A%E4%B8%AA%E5%85%B7%E6%9C%89%E5%A2%9E%E9%87%8F%E5%90%8D%E7%A7%B0%E7%9A%84%E6%96%87%E4%BB%B6%E5%A4%B9%E5%88%9B%E5%BB%BA%E5%BE%AA%E7%8E%AF%EF%BC%8C%E4%BB%A5%E5%8E%8B%E7%BC%A9%E5%88%B0%E5%85%B7%E6%9C%89%E7%9B%B8%E5%90%8C%E5%A2%9E%E9%87%8F%E5%90%8D%E7%A7%B0%E7%9A%84%E5%AD%98%E6%A1%A3%E4%B8%AD.png)
我是一个 bash 和 SE 初学者,需要一些帮助。我在 Debian 服务器上有 2000 多个文件夹(它们的名称是 1000 的增量),我需要将这些文件夹压缩到单独的仅存储存档,并在文件夹中使用相应的增量名称 1 从源升级层次结构。然后我需要在创建每个存档后删除源文件文件夹。
因此,下面的代码可以满足我的需要,但我当前的想法是重复同一行 2000 次以上。我想知道是否有更好的方法通过使用循环将这个过程自动化为几行,我猜是一个子文件夹变量?
请提供任何帮助。非常感谢!
#!/bin/bash
cd private/completed/0/ && zip -r -0 ../0.zip ./* && rm -R 0/ && cd -
cd private/completed/1000/ && zip -r -0 ../1000.zip ./* && rm -R ../1000 && cd -
cd private/completed/2000/ && zip -r -0 ../2000.zip ./* && rm -R ../2000 && cd -
cd private/completed/3000/ && zip -r -0 ../3000.zip ./* && rm -R ../3000 && cd -
cd private/completed/4000/ && zip -r -0 ../4000.zip ./* && rm -R ../4000 && cd -
....
cd private/completed/2800000/ && zip -r -0 ../2800000.zip ./* && rm -R ../2800000 && cd -
更新:非常感谢您提供有用的链接,Kusalananda(将多个目录压缩到单独的 zip 文件中的命令)。我使用了相关答案中的代码并对其进行了稍微修改,以使其完全按照我需要的方式工作。我添加了下面的结果代码:
#!/bin/bash
cd private/completed/
for i in {0..2800000..1000}; do echo "$i" ; cd "$i" ; zip -q -r -0 ../"${i%/}.zip" . && cd .. && rm -R "$i" ; done
答案1
您可以使用 for 循环;像这样;例如: seq 开始 步骤结束
for i in `seq 1000 1000 2000000`;do echo $i; done;
您可以使用 cp 命令并使用 $i 作为目录名称和文件夹名称
答案2
更新:非常感谢您提供有用的链接,Kusalananda(将多个目录压缩到单独的 zip 文件中的命令)。我使用了相关答案中的代码并对其进行了稍微修改,以使其完全按照我需要的方式工作。我添加了下面的结果代码:
#!/bin/bash
cd private/completed/
for i in {0..2800000..1000}; do echo "$i" ; cd "$i" ; zip -q -r -0 ../"${i%/}.zip" . && cd .. && rm -R "$i" ; done