Linux批量重命名文件,带有字符串操作

时间:2017-07-04 20:14:12

标签: linux bash batch-processing

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

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

2 个答案:

答案 0 :(得分:0)

好的希望在这里你有办法做到这一点。 可能它可以做得更好,但它是一个起点。

首先,将文件名设置为变量

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

用于剪切字符串的第一个字符。

答案 1 :(得分:0)

 awk -F/ '{ split($3,bits,"-");var=$1"-"$2"-"bits[1];print gensub(" ","","g",bits[2])" "gensub(" ","","g",var) }'

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