【问题标题】:Linux batch rename files, with string manipulationLinux 批量重命名文件,带有字符串操作
【发布时间】:2017-12-08 08:52:10
【问题描述】:

我有一系列具有此命名约定的文件夹:

DD / MM / YYYY - Name

例如: 01 / 05 / 2015 - test folder

我想转换格式以便于阅读,因为名称比日期更重要。

我希望输出是

Name DD-MM-YYY

for i in *; do mv "$i" ...

那么我如何在终端中,或者通过一个.sh(bash):

  • / (\s\/\s) 替换为-

  • 将 DD-MM-YYYY 移到后面?

  • 删除- (\s\-\s)?

【问题讨论】:

  • 名称中的斜线是斜线(路径分隔符)还是文字(不好,非常不好)?
  • / 和 NULL 字符不允许在类 unix 操作系统上的文件名中使用。
  • @ᴳᵁᴵᴰᴼ 这些不是路径分隔符,该人将文件标记为“日期”,前面带有“DD/MM/YYYY”,因此文件夹将命名为“01 / 05 / 2015 - 测试文件夹”不是目录路径。
  • @Drew / 在这个命名 01 / 05 / 2015 - test folder 中真的是斜线吗?我觉得不是。相反,它会类似于 division slash fileformat.info/info/unicode/char/2215/index.htm 否则您的问题可能会产生误导。

标签: linux bash batch-processing


【解决方案1】:

好吧,希望你有办法做到这一点。 也许它可以做得更好,但这是一个起点。

首先,在变量中设置文件名

file='01 / 05 / 2015 - test folder'

然后我使用- 作为分隔符来获取第一部分(日期),然后我将/ 更改为-

file_name=`echo $file | cut -f2 -d-`
file_date=`echo $file | cut -f1 -d- | sed 's/\//-/g'`

然后设置最终名称:

mv "$file" "$file_name $file_date"

另外,如果你想删除 $file_name 的第一个空格,试试

file_name=`echo $file | cut -f2 -d- | cut -c 2-`

将字符串的第一个字符截断。

【讨论】:

    【解决方案2】:
     awk -F/ '{ split($3,bits,"-");var=$1"-"$2"-"bits[1];print gensub(" ","","g",bits[2])" "gensub(" ","","g",var) }'
    

    这里我们使用“/”分割数据,然后用“-”进一步分割第三条数据(使用 split 函数)然后我们使用 gensub 函数删除需要的空格。

    【讨论】:

      猜你喜欢
      • 2016-04-09
      • 2013-12-16
      • 2018-07-12
      • 1970-01-01
      • 2014-11-08
      • 2021-02-09
      • 2021-06-17
      • 2014-07-01
      • 1970-01-01
      相关资源
      最近更新 更多