提取特定文件名并将其放入其名称的文件夹中

提取特定文件名并将其放入其名称的文件夹中

我是 Bash、Ubuntu 16.04 的新手。

我有大量文件,看起来像:

aaaa1111
aaaa1112
aaaa1113
aaaa1114 ...

aaab1111
aaab1112
aaab1113
aaab1114 ...

aaac1111 
aaac1112 ... (and so on ...)

无论如何,模式是 4 个字符 + 和数字。我要做的就是根据这4个字符建立目录,并将相应的文件放入该目录中。

例如,

aaaa1111
aaaa1112
aaaa1113
aaaa1114 ...

将被放入aaaa目录中。

aaab1111
aaab1112
aaab1113
aaab1114 ...

会被放到aaab目录下。

我尝试过“sed”、“mv”等,但效果不佳。

答案1

for file in [a-z][a-z][a-z][a-z][0-9][0-9][0-9][0-9]; do
    mkdir -p "${file:0:4}" && mv "$file" "${file:0:4}"
done

-loopfor使用四个字符和四位数字迭代当前目录中的文件名,并file在每一步中将一个文件名分配给变量。

mkdir创建目标目录。-p如果目录已存在并${file:0:4}保留当前文件名的前四个字符,则使用标志可防止出现错误消息。如果命令成功,文件将移动到此目录。

答案2

我认为这可以做到:

cd your_source_dir || exit

for file in *; do
  if [[ $(echo "$file" | grep -Pw "[a-z]{4}[0-9]{4}") ]]; then
    dir="${file:0:4}"
    [[ -d "$dir" ]] || mkdir "$dir"
    [[ -f "$file"]] && mv "$file" "$dir/"
  fi
done

相关内容