Скопируйте определенные файлы из одного каталога в другой, добавив его базовое имя каталога

У меня есть
~/a/a1/1.pdf
~/a/a1/2.pdf
~/a/b1/1.pdf
~/a/b1/2.pdf
Я хочу скопировать все pdf-файлы в ~/a/c с именами a1_1.pdf,a1_2.pdf,b1_1.pdf,b2_2.pdf. Как я могу это сделать?

Пожалуйста, простите мое невежество. Я новичок в программировании и Linux.


person Sandy    schedule 18.05.2018    source источник
comment
каковы все способы, которые вы пробовали, и что не дает вам сделать это?   -  person Ajithkumar_sekar    schedule 18.05.2018
comment
Я не буду делать это за вас, потому что вы узнаете больше, делая это. Но взгляните на модуль os и методы, которые есть у строк (например, strip, split, toupper и т. д.).   -  person Paula Thomas    schedule 18.05.2018


Ответы (2)


Вы упомянули, что не знакомы с Linux. Ниже показано, как это сделать с помощью команд оболочки. Как только это будет понято, если вы хотите сделать это из скрипта Python, вы можете выполнить аналогичные действия с импортом модуля os.

Сначала создайте целевой каталог:

# mkdir ~/a
# mkdir ~/a/c

тогда вы можете скопировать

# cp ~/a/a1/1.pdf ~a/c/a1_1.pdf
# cp ~/a/a1/2.pdf ~a/c/a1_2.pdf
# cp ~/a/b1/2.pdf ~a/c/b1_1.pdf
# cp ~/a/b1/2.pdf ~a/c/b2_2.pdf
person Timothy Lombard    schedule 18.05.2018

Я не знаю, нужно ли вам автоматически просматривать папки, поэтому, если вам это нужно, вы можете использовать что-то вроде этого для идентификации файлов PDF:

for root, dirs, files in os.walk(~/a):
    print(root, dirs, files)

Затем вы можете управлять путем с помощью команд os.path< /а>:

os.path.dirname('~/a/a1/1.pdf') -> '~/a/a1'
os.path.basename('~/a/a1/1.pdf') -> '1.pdf'

Наконец, вы также можете использовать команду shutil.copyfile:

shutil.copy('~/a/a1/1.pdf', '~/c/a1_1.pdf')

Я позволю вам объединить и протестировать все эти команды, чтобы вы познакомились с Python. Не стесняйтесь печатать или отлаживать переменные, прежде чем создавать окончательный файл shutil.copyfile.

person f-roche    schedule 18.05.2018