Скопируйте данные из вложенного исходного каталога в целевой каталог

Я только начал изучать python и застрял в понимании приведенной ниже ситуации, надеюсь, вы забудете мои глупые ошибки.

У меня есть путь к каталогу /home/sysmgt/rmlogs/, в котором есть дополнительные каталоги с моими названиями месяцев, так как у меня есть каталог за месяц январь, и этот каталог снова содержит несколько каталогов за месяц января по датам, и эти каталоги, наконец, содержат несколько файлов по системным именам с text расширения. Итак, то, что я пытаюсь достичь, - это выполнить переход в каталог к ​​текущему месяцу и скопировать все содержимое файлов txt в один файл в каталоге назначения, скажем, /scratch/rm_logs/, но поскольку это будет сценарий, выполняющий каждый интервал, поэтому необходимо чтобы проверить, нельзя ли перезаписать уже скопированное содержимое данных (содержимое файла).

$ cd /home/sysmgt/rmlogs/

[karn@noi-karn rmlogs]$ ls -ltrh | tail

drwxr-xr-x 70 nfsnobody nfsnobody 8.0K Nov 25 17:04 November
drwxr-xr-x 88 nfsnobody nfsnobody 8.0K Dec 16 15:38 June
drwxr-xr-x 33 nfsnobody nfsnobody 4.0K Dec 25 05:12 December
drwxr-xr-x 11 nfsnobody nfsnobody 4.0K Jan  8 15:01 January
drwxr-xr-x 62 nfsnobody nfsnobody 8.0K Jan  8 15:37 July


$ cd January
$ ls -ltrh
total 1.9M
drwxrwxrwx 2 nfsnobody nfsnobody 228K Jan  1 23:59 Jan_01_19
drwxrwxrwx 2 nfsnobody nfsnobody 228K Jan  2 23:59 Jan_02_19
drwxrwxrwx 2 nfsnobody nfsnobody 228K Jan  3 23:59 Jan_03_19
drwxrwxrwx 2 nfsnobody nfsnobody 228K Jan  4 23:59 Jan_04_19
drwxrwxrwx 2 nfsnobody nfsnobody 228K Jan  5 23:59 Jan_05_19
drwxrwxrwx 2 nfsnobody nfsnobody 228K Jan  6 23:59 Jan_06_19
drwxrwxrwx 2 nfsnobody nfsnobody 228K Jan  7 23:59 Jan_07_19
drwxr-xr-x 2 nfsnobody nfsnobody 4.0K Jan  8 15:01 Jan_15_19
drwxrwxrwx 2 nfsnobody nfsnobody 228K Jan  8 16:18 Jan_08_19


$ cd Jan_08_19
$ ls -ltrh| tail
-rw-r--r-- 1 nfsnobody nfsnobody  26K Jan  8 16:03 dbfchw091.txt
-rw-r--r-- 1 nfsnobody nfsnobody  238 Jan  8 16:07 dbfcnl030.txt
-rw-r--r-- 1 nfsnobody nfsnobody  695 Jan  8 16:10 dbfcib069.txt
-rw-r--r-- 1 nfsnobody nfsnobody 1.6K Jan  8 16:13 dbfchw126.txt
-rw-r--r-- 1 nfsnobody nfsnobody  401 Jan  8 16:13 dbfcib001.txt
-rw-r--r-- 1 nfsnobody nfsnobody 7.0K Jan  8 16:15 dbfcsb003.txt
-rw-r--r-- 1 nfsnobody nfsnobody  44K Jan  8 16:16 klno-foxvcron-in2.txt
-rw-r--r-- 1 nfsnobody nfsnobody 3.7K Jan  8 16:17 dbfcnl059.txt

Я пробовал использовать glob и shutil.copy(), но не получил.

>>> for filename in glob.glob(os.path.join("/home/sysmgt/rmlogs/January/"*.*"/*.txt")):
...     shutil.copy(filename, "/scratch/rm_logs/")

Ошибка:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't multiply sequence by non-int of type 'str'

Вы пытаетесь умножить путь на имя файла. Вы можете умножить строку только на целое число, чего вы хотели добиться с помощью этого умножения?

PSM 08.01.2019 12:12

@PSM, извини, я имел ввиду подстановочный знак.

kulfi 08.01.2019 12:14

Вы пробовали os.path.join("/home/sysmgt/rmlogs/January/*/*.txt")?

PSM 08.01.2019 12:16

Вам следует попробовать glob.glob(os.path.join("/home/sysmgt/rmlogs/January/", "*/*.txt")) или glob.glob("/home/sysmgt/rmlogs/January/*/*.txt").

dede 08.01.2019 12:24

@PSM, это работает, но теперь он переопределяется, если я снова запущу его, спасибо за исправление

kulfi 08.01.2019 12:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот ваш ответ:

for filename in glob.glob("/home/sysmgt/rmlogs/January/*/*.txt"):
    shutil.copy(filename, "/scratch/rm_logs/")

Если вы хотите избежать перезаписи файлов при повторном запуске, вы можете сделать:

for filename in glob.glob("/home/sysmgt/rmlogs/January/*/*.txt"):
    if not os.path.exists("/scratch/rm_logs/" + os.path.basename(filename)):
        shutil.copy(filename, "/scratch/rm_logs/")

Большое спасибо за ответ, но я ищу идею, как убедиться, что даже если файл изменился, только добавление измененного содержимого не отменяет.

kulfi 08.01.2019 14:42

Другие вопросы по теме