AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1664209
Accepted
Hot JAMS
Hot JAMS
Asked: 2021-07-23 23:40:24 +0800 CST2021-07-23 23:40:24 +0800 CST 2021-07-23 23:40:24 +0800 CST

用于操作大量 tar.gz 档案的 bash 工作流程

  • 772

我正在使用由 4 个子目录组成的目录

ls -t
pnmrnp40_to_69  pnmrnp9028_to_9100  pnmrnp00_to_39  pnmrnp70_to_9028

在每个 prmnp* 子目录中,有许多填充属于 *.tar.gz 存档或 *.md5sub (我不知道它是什么,所以应该删除它)。

charlie@Precision-7920-Tower:~/Documents/script/mega_data/pnmrnp/pnmrnp40_to_69$ ls -t
ligands57_dir_results.tar.gz.md5sum  ligands40_dir_results.tar.gz.md5sum
ligands57_dir_results.tar.gz         ligands69_dir_results.tar.gz
ligands69_dir_results.tar.gz.md5sum  ligands68_dir_results.tar.gz
ligands68_dir_results.tar.gz.md5sum  ligands67_dir_results.tar.gz
ligands67_dir_results.tar.gz.md5sum  ligands66_dir_results.tar.gz
ligands66_dir_results.tar.gz.md5sum  ligands65_dir_results.tar.gz

我需要一个简单的 bash 工作流程,它将移动到每个子目录

  1. 删除所有 *.md5sub
  2. 将所有 *.tar.gz 解压到同一个子文件夹(保留原始存档的名称)。

这是我在 bash 中的工作流程:

#!/bin/bash
# assuming that the script is in the folder contained all subdirectories
dir="$PWD"

# loop each subdirectory
for subdir in ${dir}
cd ${subdir}
# unzip each archive to the same place
for tar in *.tar.gz; do
tar xzvf $tar
done
# return to initial dir
cd ..
done

有没有可能使这个脚本更有效,以便它可以适应大量的档案?

bash tar
  • 1 1 个回答
  • 33 Views

1 个回答

  • Voted
  1. Best Answer
    Tom Yan
    2021-07-24T00:08:01+08:002021-07-24T00:08:01+08:00

    find(1):

    ...
           -execdir command ;
    
           -execdir command {} +
                  Like -exec, but the specified command is run from the
                  subdirectory containing the matched file, which is not normally
                  the directory in which you started find.  As with -exec, the {}
                  should be quoted if find is being invoked from a shell.  This a
                  much more secure method for invoking commands, as it avoids race
                  conditions during resolution of the paths to the matched files.
                  As with the -exec action, the `+' form of -execdir will build a
                  command line to process more than one matched file, but any
                  given invocation of command will only list files that exist in
                  the same subdirectory.  If you use this option, you must ensure
                  that your $PATH environment variable does not reference `.';
                  otherwise, an attacker can run any commands they like by leaving
                  an appropriately-named file in a directory in which you will run
                  -execdir.  The same applies to having entries in $PATH which are
                  empty or which are not absolute directory names.  If any
                  invocation with the `+' form returns a non-zero value as exit
                  status, then find returns a non-zero exit status.  If find
                  encounters an error, this can sometimes cause an immediate exit,
                  so some pending commands may not be run at all.  The result of
                  the action depends on whether the + or the ; variant is being
                  used; -execdir command {} + always returns true, while
                  -execdir command {} ; returns true only if command returns 0.
    ...
    
    find -type f -name '*.tar.gz' -execdir tar xvf {} \;
    
    • 3

相关问题

  • 在非 root 用户上用 bash 替换 zsh

  • 在 macOS High Sierra 的终端中设置环境变量时遇到问题

  • 对于 cp 或 mv,是否有等同于 cd - 的东西?

  • Notify-发送窗口下出现的通知

  • 如何从 WSL 打开 office 文件

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 为什么通过电缆(同轴电缆)的千兆位/秒 Internet 连接不能像光纤一样提供对称速度? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve