Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 基于bash中的前缀将文件移动到子文件夹_Linux_Bash_Shell_Command Line - Fatal编程技术网

Linux 基于bash中的前缀将文件移动到子文件夹

Linux 基于bash中的前缀将文件移动到子文件夹,linux,bash,shell,command-line,Linux,Bash,Shell,Command Line,我目前有一长串文件,看起来有点像这样: Gmc_W_GCtl_E_Erz_Aue_Dl_281_heart_xerton Gmc_W_GCtl_E_Erz_Aue_Dl_254_toe_taixwon Gmc_W_GCtl_E_Erz_Homersdorf_Dl_201_head_xaubadan Gmc_W_GCtl_E_Erz_Homersdorf_Dl_262_bone_bainan Gmc_W_GCtl_E_Thur_Peuschen_Dl_261_blood_blodan Gmc_W_

我目前有一长串文件,看起来有点像这样:

Gmc_W_GCtl_E_Erz_Aue_Dl_281_heart_xerton
Gmc_W_GCtl_E_Erz_Aue_Dl_254_toe_taixwon
Gmc_W_GCtl_E_Erz_Homersdorf_Dl_201_head_xaubadan
Gmc_W_GCtl_E_Erz_Homersdorf_Dl_262_bone_bainan
Gmc_W_GCtl_E_Thur_Peuschen_Dl_261_blood_blodan
Gmc_W_GCtl_E_Thur_Peuschen_Dl_281_heart_xerton
$ find . -type f | awk -F_ '{system("mkdir -p "$5"/"$6";mv "$0" "$5"/"$6)}'
命名模式都遵循相同的顺序,我主要是根据“Aue”、“Homersdorf”、“Peuschen”等部件对文件进行分组(列表中还有许多其他部件),这些关键字的位置总是相同的(例如,它们后面都是Dl;它们都在第五个下划线之后……等等)


所有文件都在同一个文件夹中,我正试图根据bash中的这些关键字将这些文件移动到子文件夹中,但我不太确定如何移动。在此方面的任何帮助都将不胜感激,谢谢

我猜你想要这样的东西:

Gmc_W_GCtl_E_Erz_Aue_Dl_281_heart_xerton
Gmc_W_GCtl_E_Erz_Aue_Dl_254_toe_taixwon
Gmc_W_GCtl_E_Erz_Homersdorf_Dl_201_head_xaubadan
Gmc_W_GCtl_E_Erz_Homersdorf_Dl_262_bone_bainan
Gmc_W_GCtl_E_Thur_Peuschen_Dl_261_blood_blodan
Gmc_W_GCtl_E_Thur_Peuschen_Dl_281_heart_xerton
$ find . -type f | awk -F_ '{system("mkdir -p "$5"/"$6";mv "$0" "$5"/"$6)}'

这将使用带有for循环的
bash
shell将say
Gmc\u W\u GCtl\u E\u Erz\u Aue\u Dl\u heart\u xerton
移动到
/Erz/Aue/Gmc\u W\u GCtl\u E\u Erz\u Aue\u Dl\u heart\u xerton

#!/usr/bin/env bash
 
shopt -s nullglob

for file in Gmc*; do
  [[ -d $file ]] && continue
  IFS=_ read -ra dir <<< "$file"
  echo mkdir -pv "${dir[4]}/${dir[5]}" || exit
  echo mv -v "$file" "${dir[4]}/${dir[5]}" || exit
done
#/usr/bin/env bash
shopt-s nullglob
用于Gmc*中的文件;做
[[-d$file]]&继续(&C)
IFS=uu读取-ra目录