Bash将文件移动到名称前6位相同的文件夹

问题描述

我有许多文件夹,例如 123456_files 和许多文件,例如 123456.dzi , 我想将 123456.dzi 文件移到 123456_files 文件夹中 (将相同的.dzi文件放入相同的* _files文件夹)

我尝试了这段代码,但是它删除了.dzi结尾并且不移动它。

for f in *.dzi; do
  [[ -f "$f" ]] || continue
  dir="${f}"
  mv "$f" "$dir"
done

解决方法

#!/bin/bash

for f in *.dzi; do
  [[ -f "$f" ]] || continue
  dir="${f%.dzi}"
  mkdir "${dir}_files"
  mv "$f" "${dir}_files"
done
,

您可以这样做:

for f in *.dzi; do [[ -d "${f%.*}_files" ]] && mv "$f" "${f%.*}_files"; done

${variable%pattern}语法从变量的末尾删除模式中最短的匹配项,即,在这种情况下,它删除扩展名。

如果目录不存在,则可以使用类似的方法来创建它:

for f in *.dzi; do mkdir -p "${f%.*}_files"; mv "$f" "${f%.*}_files"; done