【问题标题】:remove dates, commas and periods from file names从文件名中删除日期、逗号和句点
【发布时间】:2015-02-15 07:11:59
【问题描述】:

我有以下名称的文件,我想删除文件名中的所有日期、句点和逗号

原文件名:

Employee Data 8.31.2014 v4.txt  
Hire, Transfer and Termination event 6.30.2013 to 8.31.2014v2.txt  
Expected Work Days 8.31.2014.txt

Employee Data 9.30.2014 v4.txt  
Hire, Transfer, Termination Event 6.30.2013 to 9.30.2014 v2.txt  
Expected Work Days 9.30.2014.txt

这是我想要实现的目标:

Employee Data.txt  
Hire Transfer Termination Event.txt  
Expected Work Days.txt

感谢您的帮助

【问题讨论】:

  • 很好。祝你好运。你有问题吗?
  • 为什么v4 被删除了?
  • 贵公司将这些信息认真地存储在 .txt 文件中?
  • 重命名 Employee Data 8.31.2014 v4.txt 肯定会覆盖 Employee Data 9.30.2014 v4.txt,还是您希望它们以某种方式结合?

标签: linux rename


【解决方案1】:

不幸的是,您在文件中使用空格时遇到了一大堆问题,因此一个衬里不会解决它(使用 exec 和 sed 找到),至少我不想弄清楚所有必要的引用。所以我建议使用一个小的 for 循环并设置 ISF 系统变量(如果不是空白会干扰)。这会导致你得到这样的结果:

IFS=$(echo -en "\n\b")

将 ISF 设置为中断(而不是默认空白,在此处阅读更多信息:http://www.cyberciti.biz/tips/handling-filenames-with-spaces-in-bash.html

然后是一个小的 for 循环,以便能够在每个文件上使用 sed。假设您要更改文件夹中的所有文件并且它的孩子使用

$(find . -name "*.txt")

遍历它:

for file in $(find . -name "*.txt"); do echo $file; done; 

现在我们想了解变化。逗号很容易使用:

for file in $(find . -name "*.txt"); do mv $file $(echo $file | sed -e s/,//); done;

对于句点,您可能需要先决定是否要删除日期。对于日期,您可能想了解所有日期是否符合格式 D[D].MM.YYYY。第二个问题可能是您不想删除文件类型之前的点。我想向您指出有关 sed 和正则表达式主题的其他几个问题。 例如这里:How to match date mm/dd/yyyy

【讨论】:

    猜你喜欢
    • 2023-02-25
    • 2011-05-27
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 2011-06-24
    相关资源
    最近更新 更多