【问题标题】:Bulk renaming of files with white spaces in names, based on lookup, keeping folder structure批量重命名名称中包含空格的文件,基于查找,保持文件夹结构
【发布时间】:2020-01-28 01:24:18
【问题描述】:

我在一个文件夹结构中有 12000 个 PDF 文件和一个查找 csv 文件来重命名它们,保持结构。我找到了

Bulk renaming of files based on lookup

但名称中的空格没有得到处理,我没有发现任何东西可以遍历整个文件夹树结构并在维护文件夹结构的同时根据查找表重命名文件。

有什么想法吗? 谢谢

【问题讨论】:

  • 你能举一个例子吗:PDF的名称(大约5个左右)和它们在查找csv中对应的对应项?
  • 嗨 Rushi,感谢您的提问。这里只是一个例子:“13_07 Daimler Korres17.pdf”=“Antwort1 Daimler 13_17_2017.pdf”。这是一个巧合,同一个词出现在旧名称和新名称中。情况并非总是如此,字符的顺序也不总是相同。因此,确实没有从旧名称派生新名称的系统。一个人只需要使用查找表。我们可以从 csv 创建一个 sqlite 文件以加快查找速度,因此我们可以读取文件名并很快获得新名称,但是遍历所有文件夹的代码似乎很棘手,不是吗?

标签: python-3.x


【解决方案1】:

当文件名中有空格时,应使用双引号将它们括起来或将其中的空格转义。

对于你想做的事情,你可以重复使用下面的zsh脚本。

它将要处理的目录作为参数。首先尝试一些不重要的小目录。为了避免做错,我设置了一个对话框并促进了反向重命名。

要重命名的文件是使用zsh 的全局功能选择的。您需要根据您的情况进行调整。我制作了一个文件列表数组(带括号),所以我不必担心文件分隔符。

您应该调整fromto 变量或更一般的sed 替换规则。您可以将 csv 文件转换为 sed 脚本。

#!/usr/bin/env zsh

from=RIB;to=IBAN
## reverse
#from=IBAN;to=RIB

filelist=($1/**/$from*.(pdf|jpg|jpeg|PDF|JPG|JPEG))

zip(){
    for file in $filelist
    do
    $1 "$file" "`echo $file|sed -E "s/(.*)$from(.*)/\1$to\2/"`"
    done}

# dry run
zip echo

read -q -s $'REPLY?Do you want to rename as above ?\n'
[[ $REPLY != y ]] && {echo "Not renaming and exiting.";exit}

echo "Renaming..."
zip mv
echo "Renamed."

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-07
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2014-03-05
    相关资源
    最近更新 更多