sed / bash将部分文件名和日期附加到bash中的新文件名

时间:2015-02-03 18:24:39

标签: bash sed

我在一个文件夹中有一堆csv文件。我需要一个sed / bash脚本来完成文件夹中每个文件的以下内容:

获取filename.csv,对每个文件执行一个脚本,并将执行结果粘贴到filename + CurrentDate.csv中,其中当前日期只是没有空格的日期。

例如: 在对其执行函数后,abc.csv将变为abc_02-03-15.csv。

我认为代码看起来像这样:

#!/bin/bash
dir="/var/tmp/"
now=$(date)
for f in "$dir"/*; do
   ScriptName
   sed OriginalFileName > "OriginalFileName+$now.csv" 
done

请提前通知并感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

假设您的过滤脚本在stdin上获取其输入并写入stdout:

dir="/var/tmp/"
now=$(date "+%Y-%m-%d")
for f in "$dir"/*; do
   ScriptName <"$f" >"${f}_$now.csv"
done

应该相当明显,在循环内,$f引用输入名称。如果将其替换为字符串的一部分,并且字符后面是有效的变量名称,则必须使用花括号来消除歧义:$f_$now.csv将查找名为{{的变量1}},而不是f_

这里的日期是YYYY-MM-DD形式。这是强烈优于DD-MM-YY或MM-DD-YY,原因如下:它按照与其数字顺序相同的排序顺序排序(因此使用纯ASCII排序的工具,如{ {1}},将显示以这种方式命名为最新到最旧或最旧到最新的文件,并且对于人类读者来说是明确的,无论他们来自DD-MM或MM-DD是哪个国家常规的。