Shell 脚本将文件解压到目标中具有相同名称但不带 .zip 的文件夹,还将每个非 zip 移动到同一位置

Shell 脚本将文件解压到目标中具有相同名称但不带 .zip 的文件夹,还将每个非 zip 移动到同一位置

我确实需要练习我的脚本编写...到目前为止,我有下面的脚本,当将一个 .zip 和一个平面文件放入源位置时,该脚本可以工作。如果放入多个文件,它就无法正确执行,我希望看看是否有人可以提供更有效的方法帮助。只是为了澄清脚本需要扫描源文件夹中的任何 .zip 文件,将它们解压缩到同名的文件夹中减去 .zip,然后将新文件夹与文件夹中的任何其他平面文件或非 .zip 文件一起移动到目标位置。将源复制到单独的位置,并删除原始 .zip 文件。

#! /bin/bash

cd "/path/to/source/Location"
for file in $(ls *.zip); do unzip $file -d $(echo $file | cut -d . -f 1); done
mv $(echo $file | cut -d . -f 1) /Destination/for/Unzip
rm *.zip
mv LOCK* /Destination/For/Flat/Files

答案1

您可以for直接使用 globbing,.zip使用 shell 结构去除扩展名,并将存档直接提取到目标:

#!/bin/bash

cd "/path/to/source/location"
for file in *.zip; do
  unzip "${file}" -d "/destination/for/unzip/${file%%.zip}" && rm "${file}"
done
mv LOCK* /destination/for/flat/files

这也确保只有在成功提取档案后才会删除它们。

相关内容