BASH:根据dirname移动文件

BASH:根据dirname移动文件,bash,for-loop,Bash,For Loop,我想将一些处理过的文件从原始目录移到新目录。每个目录名对应,但只有两个数字;其余的dir名称不同。如何在for循环中定义一个模式,以便轻松查找这些文件并将其从相应的dir中移动 更多详情: 我有两套90个目录。第一组包含原始文件,第二组是我想移动相应gzip文件的位置。问题是第一组和第二组目录只共享其名称的一部分:第一组是ABC#u 1#;第二种是##YY00ZZ(例如:原始目录ABC_123对应于新目录23yy00zz。它们必须遵循此格式有一个复杂但必要的原因)。gzip文件都有相同的名称(我

我想将一些处理过的文件从原始目录移到新目录。每个目录名对应,但只有两个数字;其余的dir名称不同。如何在for循环中定义一个模式,以便轻松查找这些文件并将其从相应的dir中移动

更多详情: 我有两套90个目录。第一组包含原始文件,第二组是我想移动相应gzip文件的位置。问题是第一组和第二组目录只共享其名称的一部分:第一组是
ABC#u 1#
;第二种是
##YY00ZZ
(例如:原始目录
ABC_123
对应于新目录
23yy00zz
。它们必须遵循此格式有一个复杂但必要的原因)。gzip文件都有相同的名称(我们称之为FILE.gz),但关键是必须从原始目录23转到新目录23

这是我尝试过的,但它对我不起作用(使用cp而不是mv以避免太多混乱):


谢谢你的洞察力

shell扩展不会用填充的零扩展{01..90}。它将把它扩展为1,2,3,…,11,12,…,90。最好分两步进行:1)首先
ABC_10{1..9}
2)
ABC_1{10..90}

或者您可以使用
seq-w90

一旦你处理好了,你只需要像这样复制:

for i in "$(seq -w 90)"; do
      cp ~/path_to_raw_dir/ABC_1"$i"/file.gz ~/path_to_new_dir/"$i"yy00zz/file.gz
done

您可以使用
{101..190}
的范围,并根据需要切掉第一个数字:

for i in {101..190}; do
      cp ~/path_to_raw_dir/ABC_$i/file.gz ~/path_to_new_dir/${i:1}yy00zz/file.gz
done

“每个原始目录”和“每个新目录”是实际目录吗?你能给出一个移动其中一个文件所需的完整的
mv
命令的例子吗?在
bash
4或更高版本中,
{01..90}
将扩展到
00,01,02,…,90
。另外,引用
“$(seq-w90)”
将在一个很长的参数(所有数字)上循环一次!
for i in {101..190}; do
      cp ~/path_to_raw_dir/ABC_$i/file.gz ~/path_to_new_dir/${i:1}yy00zz/file.gz
done