У меня есть сотни текстовых файлов в папке, названной с помощью этого вида соглашения о присвоении имен:
Bandname1 - song1.txt
Bandname1 - song2.txt
Bandname2 - song1.txt
Bandname2 - song2.txt
Bandname2 - song3.txt
Bandname3 - song1.txt
..etc.
Я хотел бы создать папки для различных полос и переместиться согласно текстовым файлам в эти папки. Как я мог достигнуть этого удара использования, жемчуга или сценария Python?
Ответ Gregseth будет работать, просто замените обрезку
с Xargs
. Вы также можете устранить , если
, если , просто используя MKDIR -P
, например:
for f in *.txt; do
band=$(echo "$f" | cut -d'-' -f1 | xargs)
mkdir -p "$band"
mv "$f" "$band"
done
Строго говоря: Trim
или xargs
Не следует даже быть необходимым, но xargs
, по крайней мере, удалит любое дополнительное форматирование, поэтому он не повредит.
Это Не нужно использовать отделку или xargs:
for f in *.txt; do
band=${f% - *}
mkdir -p "$band"
mv "$f" "$band"
done
Эта программа Python предполагает, что исходные файлы находятся в данных
, и что новая структура каталога должна быть в цели
(и что она уже существует).
Основная точка состоит в том, что OS.Path.walk
пройдет в структуру каталогов
и вызов MyVisitor
для каждого файла.
import os
import os.path
sourceDir = "data"
targetDir = "target"
def myVisitor(arg, dirname, names):
for file in names:
bandDir = file.split("-")[0]
newDir = os.path.join(targetDir, bandDir)
if (not os.path.exists(newDir)):
os.mkdir(newDir)
newName = os.path.join(newDir, file)
oldName = os.path.join(dirname, file)
os.rename(oldName, newName)
os.path.walk(sourceDir, myVisitor, None)
ls |perl -lne'$f=$_; s/(.+?) - [^-]*\.txt/$1/; mkdir unless -d; rename $f, "$_/$f"'
Как насчет этого:
for f in *.txt
do
band=$(echo "$f" | cut -d'-' -f1 | trim)
if [ -d "$band" ]
then
mkdir "$band"
fi
mv "$f" "$band"
done
с Perl
use File::Copy move;
while (my $file= <*.txt> ){
my ($band,$others) = split /\s+-\s+/ ,$file ;
mkdir $band;
move($file, $band);
}
Вы просили конкретный скрипт, но если это для организации музыки, вы можете проверить EasyTag . Он имеет чрезвычайно специфические и мощные правила, которые вы можете настроить для организации вашей музыки, однако вы хотите:
(Источник: SourceForge.net )
Это правило говорит: «Предположим, что мои имена файлов находятся в Структура «Художник] - [Название альбома] / [Номер трека] - [Название]». Затем вы можете пометить их как таковые, или переместите файлы вокруг на любой новый шаблон, или сделать в значительной степени что-нибудь еще.