gpt4 book ai didi

regex - 根据 Linux 中文件的数量重命名目录

转载 作者:IT王子 更新时间:2023-10-29 00:36:24 26 4
gpt4 key购买 nike

我有以下布局:

  • d1
    • f1
    • f2
    • f3
  • d2
    • f4
    • f5
  • d3
    • f6
    • f7
    • f8
    • d4
      • f9

我想做的是重命名根目录以包含其中包含的(递归)文件数。只要不是太长,格式就不是特别重要。我希望能够每隔一小时左右将此脚本作为 cron 运行一次以更新目录名称,因此在第一次运行后它将如下所示:

  • 3-d1
    • f1
    • f2
    • f3
  • 2-d2
    • f4
    • f5
  • 4-d3
    • f6
    • f7
    • f8
    • d4
      • f9

然后第二次运行后,可能又添加和删除了几个文件,现在看起来像这样:

  • 1-d1
    • f1
  • 4-d2
    • f2
    • f3
    • f4
    • f5
  • 10-d3
    • f6
    • f7
    • f8
    • d4
      • f9
      • F10
      • f11
      • f12
      • f13
      • f14
      • f15

到目前为止,我有以下 bash 脚本,但我不知道如何对文件名进行正则表达式替换

#!/bin/bash

TARGETPATH=/home/pritchea/test
for CURDIR in `ls -l $TARGETPATH`
do
if [ -d $TARGETPATH/$CURDIR ]; then
echo "$CURDIR is a directory"
FILECOUNT=`find $TARGETPATH/$CURDIR -type f | wc -l`
echo " and there are $FILECOUNT file(s)";
fi
done

最佳答案

之前

.
├── d1
│   ├── f1
│   ├── f2
│   └── f3
├── d2
│   ├── f4
│   └── f5
└── d3
├── d4
│   └── f9
├── f6
├── f7
└── f8

在顶层目录运行命令

cd /home/pritchea/test

for i in *
do
[[ -d $i ]] || continue
n=${i#*-}
c=$(find "$i" -type f -printf x | wc -c)
[[ $i == $c-$n ]] && continue
mv -f "$i" "$c-$n"
done

之后

.
├── 2-d2
│   ├── f4
│   └── f5
├── 3-d1
│   ├── f1
│   ├── f2
│   └── f3
└── 4-d3
├── d4
│   └── f9
├── f6
├── f7
└── f8

关于regex - 根据 Linux 中文件的数量重命名目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10149665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com