Прежде всего, в вашем примере используется mv, которая является программой в coreutils, а не в bash.
Использование вызовов os.system() для внешних программ считается плохим стилем, потому что:
Поищите glob, для сопоставления шаблонов (globbing), подобно shell, и shutil, как уже упоминали другие. В остальном, все, что вам нужно, уже есть в стандартных библиотеках.
import glob
import shutil
for extfile in glob.glob('*.ext'):
shutil.move(extfile,dest)
Кроме того, os.system() не следует использовать - вместо него посмотрите на модуль subprocess.
Некоторые причины, по которым вам следует использовать чистый Python,
В этом случае я бы использовал ...
import os
for filename in os.listdir('.'):
if filename.endswith('.ext'):
os.rename(filename, os.path.join('path', 'to', 'new', 'destination', filename))
Но могут быть способы получше
В общем, Python предоставляет модуль «подпроцесс», который позволяет вы можете запускать команды и осуществлять полный контроль над их выводом. Он позволяет вам «создавать новые процессы, подключаться к их каналам ввода / вывода / ошибок и получать их коды возврата»:
Всегда лучше и лучше использовать функции Python для выполнения подобных задач. С Python не так сложно написать сценарий независимо от ОС вместо использования bash.
Ознакомьтесь с модулем Python shutil
. Он предлагает операции с файловой системой, такие как перемещение файлов. Между этим и модулем os
у вас должны быть все необходимые инструменты. Это предпочтительнее команд bash по причинам, о которых говорили другие.
Это не идея, поскольку это делает ваш сценарий гораздо менее переносимым. Родной скрипт python может выполняться на любой машине unix или windows, на которой установлены соответствующие библиотеки python. Когда вы добавляете команды оболочки в смесь, вы нарушаете это, и внезапно оказываетесь заперты в гораздо более узком подмножестве.
Иногда у вас нет выбора, но если это что-то настолько простое, как это, написание кода на родном языке python будет иметь гораздо больше смысла, а также будет быстрее загружаться (поскольку процессу python не придется порождать новый shell только для выполнения одной команды).
Одни проблемы с цитированием говорят о том, что решение на чистом Python предпочтительнее.