根据字数重命名文件

时间:2015-07-10 10:01:45

标签: linux bash file-rename batch-rename

是否可以根据字数重命名目录中的一堆文件,如下所示:

对于folderA中的所有文件,获取字数,然后根据字数重命名

所以AMS_01_ex345_2012040000000_0001235.NEW,此文件的字数为 1234 ,它将重命名为AMS_01_ex345_2012040000000_0001234.NEW

for x in $folder1 do exec grep -v "\"" $x | 'wc -l' > "$x.NEW"

1 个答案:

答案 0 :(得分:2)

for f in $folder1/*; do
  cnt=$(wc -l $f)
  printf -v num "%07u" ${cnt% *}
  mv $f ${f%_*}_$num.NEW
done

(对于测试,您可以将echo放在mv之前,这样就不会发生破坏。)

首先,我们将wc命令的输出分配给变量$cnt(例如567 AMS_01_ex345_2012040000000_0001235.NEW)。然后我们需要只获取它的数字并用前导零格式化这个数字。 printf -v num将结果分配给该变量。

bash中的

${parameter%word}将删除匹配的后缀模式。在我们的第一个案例中,我们将从$cnt中删除最后一个空格及其后的所有内容。在我们的第二种情况下,将从$f删除最后一个下划线及其后的所有内容。

编辑:这会计算行数,而非单词。我对问题本身中wc -l的使用感到困惑。要计算单词,请使用wc -w

相关问题