更改 bash 中具有特殊字符的文件名

我们正在运行一个 Ubuntu 服务器,它会自动从客户处通过 FTP 传输文件,最近这些文件现在显示为...“file.csv;” '文件2.csv;


我一直在尝试制定 bash 和 Python 解决方案,但没有成功。我只是想去掉单引号和分号并保留剩下的内容。这不一定是 bash,它可以是 python 甚至 perl。我在下面添加了不起作用的代码。我什至似乎无法获得目录列表。有人能指出我正确的方向吗?


for i in \'* 

    do

    echo $i

done

注意:更正了代码以删除错误的 $echo'


慕工程0101907
浏览 140回答 3
3回答

九州编程

find ... -exec rename像这样使用:find . -name "*[;']*" -exec rename "tr/';//d" {} \;例子:# Create example input files:$ touch "f'o''o'" "b;a;;r;" "b';a;'';z;'"# Build the command by first confirming that `find` finds them all:$ find . -name "*[;']*"                            ./f'o''o'./b';a;'';z;'./b;a;;r;# Find and rename them, one by one:$ find . -name "*[;']*" -exec rename "tr/';//d" {} \;# Confirm that rename worked as expected:$ ls -1rt | tail -n 3                                foobarbaz您还可以使用 进行批量重命名以提高速度xargs,例如find ... -print0 | xargs -0 ...但就您而言,我认为逐个重命名文件已经足够快了。命令行实用程序rename有多种形式。他们中的大多数人应该为这项任务而努力。我使用renameAristotle Pagaltzis 的 1.601 版本。要安装rename,只需下载其 Perl 脚本并将其放入$PATH. 或者rename使用安装conda,如下所示:conda install rename

慕侠2389804

您可以从尝试这个 pyhon 3 脚本开始。不过我只在 Windows 中测试过。import osfolder = ""for root, dirs, files in os.walk(folder, topdown=False):    for fn in files:        path_to_file = os.path.join(root, fn)        if "'" in fn or ";" in fn:            print('Removing special characters from file: ' + fn)            new_name = fn.replace("'", '').replace(";", '')             os.rename(path_to_file, os.path.join(root, new_name))

慕容708150

import osfilesInDirectory = os.listdir(Path)for filename in filesInDirectory:    if "'" in filename:        filename.replace("'", "")    elif ";" in filename:        filename.replace(";", "")     elif ("'" and ";") in filename:        filename.replace("'", "")        filename.replace(";", "")使用Python
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python