我希望将文件(abc1_gff
,abc2_gff
等)从当前目录(cds.gff
)移动到新的,预先存在的文件夹中,这些文件夹在名称(example_name_abc1
,example_name_abc2
等)的末尾匹配“abc#
“。下面是一个视觉效果:
[Linux@vaughan test]$ tree
.
├── cds.gff
│ ├── abc1_cds
│ ├── abc1_cds.gff
│ ├── abc2_cds
│ ├── abc2_cds.gff
│ └── abc_cds
├── example_name_abc1
│ └── distraction_abc1.txt
├── example_name_abc2
│ └── abc2_distraction_abc2.txt
└── move_files.sh
我希望abc1_cds.gff
被移动到example_name_abc1
中,abc2_cds.gff
被移动到example_name_abc2
中,没有额外的更改。下面是move_files.sh
脚本:
#!/bin/bash
# Iterate over files in the "cds.gff" directory
for file in cds.gff/*.gff; do
# Extract the filename without the path
filename="${file##*/}"
# Extract the last part of the folder name
last_part_of_folder="${filename%_cds.gff}"
# Check if there's a matching folder in the current directory
if [ -d "$last_part_of_folder" ]; then
# Move the file to the matching folder
mv "$file" "$last_part_of_folder/"
fi
done
这在运行./move_files.sh
后不会对任何文件位置产生任何更改(并且它是可执行的)。任何想法欢迎
1条答案
按热度按时间svujldwt1#
这一行并没有达到你所期望的效果:
如果它测试是否有一个目录的文字名称保存在
$last_part_of_folder
中;例如,是否存在名为abc1
的目录。你需要用一句话来开头:当然,如果有两个(或更多)目录有相同的最右边的子字符串,这是有风险的。您还需要对
mv
命令进行相同的更改。在启用跟踪的情况下运行这种类型的脚本通常很有帮助:bash -x path-to-script
。