我有几个车站的一些数据,这些数据是根据它们所在的车站以及它们被记录的日期而分开的,因此对于车站 1,例如,我有多个名为2019.001,2019.002
etc. 的文件夹,在这些文件夹中我有文件(全部带有同名)以 HHZ 结尾。我所做的是从每个电台获取这些文件并将它们放在另一个文件夹中,同时将它们重命名为具有上面文件夹的名称并保持电台的名称,然后我创建了与它们的名称相对应的文件夹。我的实际问题是如何移动与同一天对应的文件,例如2019.001.station1
和2019.001.station2
文件夹2019.001
.
dir0=`pwd`
mkdir -p data || exit 1
for pathname in $dir0/stam/*/*HHZ; do
cp "$pathname" "data/$( basename "$( dirname "$pathname" )" )STAMHHZ"
done
for pathname in $dir0/macu/*/*HHZ; do
cp "$pathname" "data/$( basename "$( dirname "$pathname" )" )MACUHHZ"
done
cd $dir0/data
mkdir 2019.0{10..31}
mkdir 2019.00{1..9}
如果还有另一种方式来执行我获取文件的代码部分,那么我可以概括为几个站点会很好,因为我现在只使用两个站点,但将来我将使用更多站点.
这是数据所在的树
macu
├── 2019.001
│ └── MACUHHZ
├── 2019.002
│ └── MACUHHZ
├── 2019.003
和
stam
├── 2019.001
│ └── STAMHHZ
├── 2019.002
│ └── STAMHHZ
├── 2019.003
│ └── STAMHHZ
所以理想情况下,最终情况是:
data
├── 2019.001
│ ├── 2019.001MACUHHZ
│ └── 2019.001STAMHHZ
等等
下面的脚本创建所需的文件结构。您要从中复制数据的顶级目录(在您的示例macu
和 中stam
)应添加到top_dir
变量中。您还可以将其更改为使用通配符,或从文件中读取它们等。
基本思路很简单:对于每个顶级目录,对于每个数据目录,在.中创建对应的目录data
,对于每个文件,复制文件。
pushd
并被popd
用作一个简单的技巧来使*
通配符做我们想要的。$dir0
包含操作的根文件夹,所以我们总是知道在哪里data
。
set -e
用于在出现错误时立即退出。
#!/bin/bash
set -e
top_dirs=( macu stam )
dir0="$(pwd)"
mkdir -p data
for dir in "${top_dirs[@]}" ; do
pushd "$dir" >/dev/null
for datadir in * ; do
mkdir -p "$dir0/data/$datadir"
pushd "$datadir" >/dev/null
for file in *HHZ ; do
cp "$file" "$dir0/data/$datadir/$datadir$file"
done
popd >/dev/null
done
popd >/dev/null
done
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句