首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含特定文件并传输到另一个目录的Tar (或归档)文件夹

包含特定文件并传输到另一个目录的Tar (或归档)文件夹
EN

Stack Overflow用户
提问于 2020-01-07 05:23:50
回答 1查看 61关注 0票数 1

我正在寻找tar或存档大量数据,以将其传输到Ubuntu16LTS上的一个新位置。

数据结构:

代码语言:javascript
复制
Directory
├── docs
├── results
│   └── results.txt
├── participant_A1
│   ├── sequence_1
│   │   ├── xyz.IMA
│   │   ├── xyz2.IMA
│   │   ├── xyz3.IMA
│   │   └── ...IMA
│   ├── sequence_2
│   │   ├── xyz2.IMA
│   │   ├── xyz3.IMA
│   │   └── ...IMA  
│   
├── participant_B2
│   ├── sequence_3
│   │   ├── xyz.IMA
│   │   ├── xyz2.IMA
│   │   ├── xyz3.IMA
│   │   └── ...IMA
│   ├── sequence_4
│   │   ├── xyz2.IMA
│   │   ├── xyz3.IMA
│   │   └── ...IMA
│   │   ...etc

我的问题是,由于inode的限制,在rsync之前,我需要存档包含.IMA文件的文件夹。

  • 我想保持数据结构的完整。我想对每个子目录的所有'sequence').
  • All文件进行解析,并将存档保存在它们的文件夹中(每个

中有几千个,“参与者”是随机命名的)。

  • --“序列”名称在participants.
  • The其余数据之间也是可变的,无需存档即可传输。

我想我可以这样做:find / -type f -name "*IMA" -exec tar -rf archive.tar '{}' \;,但我不知道如何用可变文件夹名保持数据结构不变。

预期结果:

代码语言:javascript
复制
Directory
├── docs
├── results
│   └── results.txt
├── participant_A1
│   ├── sequence_1.tar.gz
│   ├── sequence_2.tar.gz
│   
├── participant_B2
│   ├── sequence_3.tar.gz
│   ├── sequence_4.tar.gz
│   │   ...etc
EN

回答 1

Stack Overflow用户

发布于 2020-01-16 01:47:50

这是我不雅的解决办法。这将进入目录(in_dir),然后搜索该目录中包含.IMA文件的任何目录。每个包含IMA的文件夹都将被归档。整个顶级目录被发送到$out_dir,不包括.IMA文件的文件夹(使用tar的--排除标志)。然后删除归档文件夹以节省空间。

代码语言:javascript
复制
#!/bin/bash
in_dir=~/test_in_dir
out_dir=~/test_out_dir

查找所有包含IMA文件的文件夹

代码语言:javascript
复制
find ${in_dir} -name '*.IMA' -printf '%h\n' | sort -u

循环遍历目录并使其成为一个数组。

代码语言:javascript
复制
cd $in_dir
i=0
shopt -s dotglob
shopt -s nullglob
array=(`find . -name '*.IMA' -printf '%h\n' | sort -u`)
for dir in "${array[@]}" ; do
    echo "$dir"
    (( i++))
done

循环遍历数组、$i次数和tar每个文件夹。

代码语言:javascript
复制
j=0
while ((j < $i)) ; do
    cd $in_dir
    cd ${array[$j]}
    folder=${PWD##*/}
    cd ../
    tar cfz ${folder}.tar.gz ${folder}/*
    (( j++ ))
done

将整个目录发送到out_dir,但不包括数组中的所有目录

代码语言:javascript
复制
exclude_options=()
for x in "${array[@]}"; do
  exclude_options+=(--exclude="$x")
done
cd $in_dir
tar -czvf $out_dir/transferred_from_in.tar.gz "${exclude_options[@]}" ./

rm in_dir中的所有tar文件以节省空间

代码语言:javascript
复制
for y in "${array[@]}"; do
    rm -r ${y}.tar.gz  
done
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59622610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档