将同名文件移动到目录中,并将计数的个数写入目录名

将同名文件移动到目录中,并将计数的个数写入目录名
find /volume1/file/* -type f \( -name "*DF*" -a -name "*LIVE*" \) -print0 | while IFS= read -d '' file
do
    # extract the name of the directory to create
    dirName="${file%.E*}"
    count=$(find "$file" -type f | wc -l;)
    # create the directory if it doesn't exist
    [[ ! -d "$dirName$count" ]] && mkdir "$dirName$count"

    mv "$file" "$dirName$count"
done

你好呀,

我正在使用另一个编码器的shell脚本,但我修改了它,因为我想添加更多功能,但它不起作用

修改部分count=$(find "$file" -type f | wc -l;)

例如,我的Linux硬盘中有大约10,000个文件,在这10,000个文件中,我读取“.E”之前的文件标题,并以该标题创建一个目录来移动文件。在这里,我想将该目录中的文件数量放入目录名称中。

EX)
artist.E01.DF.LIVE
artist.E02.DF.LIVE
artist.E03.DF.LIVE
artist.E04.DD.LIVE
directory name = "artist3"

我想这样做,但是使用我修改的脚本,只计算了1

答案1

(1) 您想在哪里搜索什么?find "$file" -type f查找名为 的路径下的所有文件$file。但由于这只是一个文件,因此只能找到一次,因此您得到的计数总是为 1。

(2) 您可能打算搜索名为$fileunder 的文件/volume1/file/,但请注意,如果有四个文件,那么在移动第一个文件后,将只剩下三个,因此您将拥有不同的目录名称。

您可能想要类似的东西(未经测试):

find /volume1/file/* -type f \( -name "*DF*" -a -name "*LIVE*" \) -print0 | while IFS= read -d '' file
do
    # extract the name of the directory to create
    dirName="${file%.E*}"
    if test -d "$dirName"*; then
      dirName="$dirName"*
    else
      count=$(find /volume1/file/* -name "$dirName*" -type f | wc -l)
      dirName="$dirName$count"
      mkdir "$dirName"
    fi
    mv "$file" "$dirName"
done

相关内容