Я только начал изучать 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, извини, я имел ввиду подстановочный знак.
Вы пробовали os.path.join("/home/sysmgt/rmlogs/January/*/*.txt")?
Вам следует попробовать glob.glob(os.path.join("/home/sysmgt/rmlogs/January/", "*/*.txt")) или glob.glob("/home/sysmgt/rmlogs/January/*/*.txt").
@PSM, это работает, но теперь он переопределяется, если я снова запущу его, спасибо за исправление






Вот ваш ответ:
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/")
Большое спасибо за ответ, но я ищу идею, как убедиться, что даже если файл изменился, только добавление измененного содержимого не отменяет.
Вы пытаетесь умножить путь на имя файла. Вы можете умножить строку только на целое число, чего вы хотели добиться с помощью этого умножения?