Linux Bash 脚本 - 将连续文件排序到连续文件夹

Linux Bash 脚本 - 将连续文件排序到连续文件夹

我有 1000 个文件序列,其名称如下:

file01-01-01, file01-01-02 etc.
file01-02-01, file01-02-02 etc.
file02-01-01, file02-02-02 etc.

我想将文件排序到以下文件夹中:

dir01-01 (containing files01-01*)
dir01-02 (containing files01-01*)
dir02-01 (containing files02-01*)

我知道我可以通过如下方式减少完成此操作所需的时间:

mkdir dir01-01; for f in file01-01*; mv "$f" dir01-01; done

但上述方法只能稍微减少排序时间,我怎样才能自动化整个排序操作呢?

我知道我需要用 let N ++ 做一些事情但不确定如何将它合并。

答案1

这应该可行。首先,我创建了如下测试文件:

touch file01-01-01 file01-01-02 file01-02-01 file01-02-02 file02-01-01 file02-02-02

通过使用确认它们存在ls -1,输出如下所示:

file01-01-01
file01-01-02
file01-02-01
file01-02-02
file02-01-01
file02-02-02

然后我在包含这些文件的目录中运行了这个 Bash 脚本:

find . -type f |\
  while read FULL_FILE_PATH
  do
    FIRST_TWO_DIGITS=$(echo "${FULL_FILE_PATH}" | grep -Eo '[[:digit:]]{2}-[[:digit:]]{2}');
    if [ ! -z "$FIRST_TWO_DIGITS" -a "$FIRST_TWO_DIGITS" != " " ]; then
      DIR=dir"${FIRST_TWO_DIGITS}";
      mkdir -p "${DIR}";
      mv "${FULL_FILE_PATH}" "${DIR}";
    fi
  done

完成后,我ls -1像这样检查了目录,以下是返回的输出:

dir01-01
dir01-02
dir02-01
dir02-02

因此目录在那里,但为了确认文件已被复制,我运行了如下ls命令: 。这是输出:*ls -1 *

dir01-01:
file01-01-01
file01-01-02

dir01-02:
file01-02-01
file01-02-02

dir02-01:
file02-01-01

dir02-02:
file02-02-02

相关内容