Linux: переименовать файл частично в каталог папки и переместить файл - PullRequest
0 голосов
/ 07 мая 2020

Я видел много очень интересных вещей, но не могу делать то, что хочу.

Я использую pyload для загрузки файлов. все загрузки сохраняются в папке загрузки

Итак, я хотел бы создать сценарий, который восстановит часть имени папки, которая будет создана мной во время загрузки, чтобы переименовать файл внутри без изменения расширения file.

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

вот конкретный пример

/path/folder/Download/Powershell--SCCM--Add Auto Package/myfile.ps1
/path/folder/Download/Movies--TrailerofApplication/mymoooovie.mkv
/path/folder/Download/Music--Free--Personal--Mymusicname/mysicmu.mp3

Для первого примера:

/path/folder/Download/Powershell--SCCM--Add Auto Package/myfile.ps1

Powershell - это переменная. Итак, Powershell = / my / path / powershell / То же самое для moovies или Musi c с другим путем. Например, Moovies: / path / very / long / и / more / movies / here /

- это разделитель. Следующая - это только папка внутри первой папки. Пример:

    /path/folder/Download/Music--Free--Personal--Mymusicname/mysicmu.mp3

Is: / path / to / my / musics / Free / Personal /

Последняя переменная - это имя файла, который необходимо отредактировать. Пример:

    /path/folder/Download/Movies--TrailerofApplication/mymoooovie.mkv

Это: /path/very/long/and/more/movies/here/TrailerofApplication.mkv

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

Есть идеи?

1 Ответ

0 голосов
/ 08 мая 2020

Я бы подошел к этому шаг за шагом:

  1. Удалить путь к папке загрузки из пути к файлу: "/path/folder/Download/Powershell--SCCM--Add Auto Package/myfile.ps1" => "Powershell--SCCM--Add Auto Package/myfile.ps1"
  2. Получить расширение: "Powershell--SCCM--Add Auto Package/myfile.ps1" => "ps1"
  3. Получить строку целевого пути: "Powershell--SCCM--Add Auto Package/myfile.ps1" => "Powershell--SCCM--Add Auto Package"
  4. Из целевого пути построить список для поиска и замены замен пути: "Powershell--SCCM--Add Auto Package" => ["Powershell", "SCCM", "Add Auto Package"]
  5. Выполнить замены на основе некоторого словаря: ["Powershell", "SCCM", "Add Auto Package"] => ["/my/path/powershell", "SCCM/path", "Add Auto Package"] Это можно сделать для всех элементов списка или всех, исключая последний элемент, на всякий случай.
  6. Создать целевой путь из списка и расширения: ["/my/path/powershell", "SCCM/path", "Add Auto Package"] + "ps1"=> "/my/path/powershell/SCCM/path/Add Auto Package.ps1"
  7. Наконец переместите файл, shutil.move() метод может быть для этого.

Python справится с этим довольно легко, bash будет немного сложнее. Также вы хотите интегрироваться с pyload , поэтому Python может быть лучше. Вот как приведенный выше алгоритм выглядит в коде моей оболочки Python (конечно, требует некоторого редактирования для правильных замен и т.д.):

>>> import shutil
>>> 
>>> substitutions = {"Powershell": "/my/path/powershell", "SCCM": "SCCM/path"}
>>> source_path = "/path/folder/Download/Powershell--SCCM--Add Auto Package/myfile.ps1"
>>> extension = source_path.split(".")[1]
>>> print extension
ps1
>>> relative_path = source_path.replace("/path/folder/Download/", "")
>>> print relative_path
Powershell--SCCM--Add Auto Package/myfile.ps1
>>> destination_path_string = relative_path.split("/")[0]
>>> print destination_path_string
Powershell--SCCM--Add Auto Package
>>> destination_path_list = destination_path_string.split("--")
>>> print destination_path_list
['Powershell', 'SCCM', 'Add Auto Package']
>>> for i, p in enumerate(destination_path_list[:-1]):
    if p in substitutions:
        destination_path_list[i] = substitutions[p]


>>> print destination_path_list
['/my/path/powershell', 'SCCM/path', 'Add Auto Package']
>>> destination_path = "/".join(destination_path_list) + "." + extension
>>> print destination_path
/my/path/powershell/SCCM/path/Add Auto Package.ps1
>>> shutil.move(source_path, destination_path)  
...