我有 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