【问题标题】:Linux : Rename file by a part the folder directory and move fileLinux:通过文件夹目录的一部分重命名文件并移动文件
【发布时间】:2020-05-07 16:06:23
【问题描述】:

我看到了很多非常有趣的事情,但我不能做我想做的事。

我正在使用 pyload 下载文件。 所有下载都保存在下载文件夹中

所以,我想创建一个脚本来恢复在下载过程中创建我的文件夹的部分名称,以便在不修改文件扩展名的情况下重命名里面的文件。

我说的是文件的一部分,因为文件的另一部分将用于知道我应该将这个文件移动到哪里

这是一个具体的例子

/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 的例子是 /path/very/long/and/more/movies/here/

-- 是分隔符。 接下来是第一个文件夹内的唯一文件夹。 示例:

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

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

最后一个变量是需要编辑的文件名。 示例:

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

是:/path/very/long/and/more/movies/here/TrailerofApplication.mkv

目前,我所有的多个代码都不起作用。 我把它留给你,因为我不知道我可以使用什么类型的语言来使它尽可能简单我想集成到 pyload 以便它直接由应用程序处理。

有什么想法吗?

【问题讨论】:

    标签: python linux bash command-line sh


    【解决方案1】:

    我会一步一步来:

    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 shell 代码中的样子(当然需要进行一些编辑以进行适当的替换等):

    >>> 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)  
    

    【讨论】:

      猜你喜欢
      • 2016-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 2014-12-27
      • 2017-06-07
      • 2013-12-05
      相关资源
      最近更新 更多