如何根据文件名创建文件夹并移动文件?

5 投票
7 回答
5563 浏览
提问于 2025-04-15 18:42

我有几百个文本文件,放在一个文件夹里,这些文件的命名方式是这样的:

Bandname1 - song1.txt
Bandname1 - song2.txt
Bandname2 - song1.txt
Bandname2 - song2.txt
Bandname2 - song3.txt
Bandname3 - song1.txt
..etc.

我想为不同的乐队创建文件夹,并把相应的文本文件移动到这些文件夹里。我该怎么用bash、perl或者python脚本来实现这个呢?

7 个回答

2

使用Perl语言

use File::Copy move;
while (my $file= <*.txt> ){
    my ($band,$others) = split /\s+-\s+/ ,$file ;
    mkdir $band;
    move($file, $band);
}
4

其实不需要用到 trim 或者 xargs:

for f in *.txt; do
    band=${f% - *}
    mkdir -p "$band"
    mv "$f" "$band"
done
1

gregseth的回答是可行的,只需要把 trim 替换成 xargs。你也可以通过直接使用 mkdir -p 来省去 if 的判断,比如:

for f in *.txt; do
    band=$(echo "$f" | cut -d'-' -f1 | xargs)
    mkdir -p "$band"
    mv "$f" "$band"
done

严格来说,trimxargs 其实并不是必须的,但使用 xargs 至少可以去掉一些多余的格式,所以用它也没坏处。

撰写回答