Linux 根据字数重命名文件

Linux 根据字数重命名文件,linux,bash,file-rename,batch-rename,Linux,Bash,File Rename,Batch Rename,是否可以根据文件的字数重命名目录中的一组文件,如下所示: 对于folderA中的所有文件,获取它们的字数,然后根据它们的字数重命名它们 因此AMS_01_ex345_2012040000000_0001235。新的,此文件的字数为1234,将重命名为AMS_01_ex345_2012040000000_0001234。新的 for f in $folder1/*; do cnt=$(wc -l $f) printf -v num "%07u" ${cnt% *} mv $f ${f%

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

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

因此
AMS_01_ex345_2012040000000_0001235。新的
,此文件的字数为1234,将重命名为
AMS_01_ex345_2012040000000_0001234。新的

for f in $folder1/*; do
  cnt=$(wc -l $f)
  printf -v num "%07u" ${cnt% *}
  mv $f ${f%_*}_$num.NEW
done
对于$folder1中的x执行grep-v“\”$x |“wc-l”>“$x.NEW”

(对于测试,您可以在
mv
之前放置
echo
,以便不会发生破坏。)

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

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


编辑:这会计算行数,而不是字数。我被问题本身中使用的
wc-l
弄糊涂了。要计算字数,请使用
wc-w

,因此您希望替换文件名的最后一部分(介于
\ucode>和
.NEW
之间)使用正确的字数?或者只将数字附加到文件名?是的,我正在尝试用字数替换uu和.NEW之间的最后部分