是否可以根据文件的字数重命名目录中的一组文件,例如:
对于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"
最佳答案
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
将结果赋给该变量。${parameter%word}
在bash中将删除匹配的后缀模式。在我们的第一个例子中,我们将从$cnt
中删除最后一个空间及其之后的所有内容。在我们的第二种情况下,将从$f
中删除最后一个下划线及其后的所有内容。编辑:这计算的是行,而不是词。我被问题本身中的
wc -l
用法弄糊涂了。要计算单词数,请使用wc -w
。关于linux - 根据字数重命名文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31337992/