如何根据文件名创建文件夹并移动文件?
我有几百个文本文件,放在一个文件夹里,这些文件的命名方式是这样的:
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
严格来说,trim
或 xargs
其实并不是必须的,但使用 xargs
至少可以去掉一些多余的格式,所以用它也没坏处。