创建与文件名称相同的文件夹,并将这些文件移动到新文件夹中

Create folders with same names that files and move these files into the new folders

提问人:Sergio Bolívar 提问时间:7/27/2023 最后编辑:CyrusSergio Bolívar 更新时间:7/27/2023 访问量:76

问:

我正在尝试创建与中央文件夹中的多个文件同名的文件夹,并将文件移动到具有相同基本名称的文件夹中。

├── din_UWBM.trimmed_1P.fastq.gz
├── din_UWBM.trimmed_2P.fastq.gz
├── par_UWBM.trimmed_1P.fastq.gz
├── par_UWBM.trimmed_2P.fastq.gz

结果将是这样的:

├── din_UWBM
│   ├── din_UWBM.trimmed_1P.fastq.gz
│   └── din_UWBM.trimmed_2P.fastq.gz
├── par_UWBM
│   ├── par_UWBM.trimmed_1P.fastq.gz
│   └── par_UWBM.trimmed_2P.fastq.gz

我试试这个脚本:

for file in *_1P.fastq.gz; do
    dir=$(basename -s .trimmed_1P.fastq.gz $file)
    read2=$(find . -name "*.trimmed_2P.fastq.gz");
    mv $file $read2 $dir
done

但这只会移动_1P文件,而不是_2P(或移动到第一个文件夹)。

有人知道如何解决这个问题吗?我会手动完成,但更多的是 400 对文件!

我非常感谢您提供的任何帮助。

bash 循环 for 循环 递归

评论


答:

1赞 tshiono 7/27/2023 #1

使用提供的文件名,以下代码将起作用:

for f in *.fastq.gz; do
    d=${f%%.*}          # remove everything after the leftmost dot
    mkdir -p "$d"       # -p option suppress error if the directory already exists
    mv -- "$f" "$d"
done

评论

1赞 Sergio Bolívar 7/27/2023
非常感谢@tshiono的帮助!效果完美!