使用 mv 命令移动包含空格的文件

Moving files containing spaces with mv command

我有以下输入。

实体可以是'MG SOCRATES''VALIND''SUSBTECT'

此实体具有以下目录。

/home/tca/git/tca/<实体>

示例:

/home/tca/git/tca/MG SOCRATES
/home/tca/git/tca/VALIND
/home/tca/git/tca/SUSBTECT

在每个目录中我都有这种模式的文件 something_or-something。

例如:

/home/tca/git/tca/SUSBTECT/asdsad2018-01-01-2018-12-31sdadsda
/home/tca/git/tca/SUSBTECT/asdsad2018-01-01_2018-12-31sdsadadsda

我想将它们移动到具有以下结构的每个实体的子目录中。

例如,我有这个子目录。 /home/tca/git/tca/SUBTECT/2018-01-01_2018-12-31

我想做的是从 /home/tca/git/tca/SUUSBTECT/ 匹配模式 _or- 的所有文件移动到子目录。

我的代码正确执行,但实体 'MG SOCRATES' 失败,因为有一个 space 移动命令无法解释。

我的代码:

    entity_path="$entity_path""/*"$file_start"*"$file_end"*"
    echo `mv -t  "$path" $entity_path`

其中 $entity_path 所有匹配模式的文件,$path 是我要移动文件的目录。

我认为是关于 space 的问题。

有什么想法吗?

无法进行路径名扩展但不进行分词的常规参数扩展,因此您尝试将模式放入 entity_path 将会失败。要么直接用pattern,

mv -t "$path" "$entity_path"/*"$file_start"*"$file_end"*

或将路径名扩展的结果存储在一个数组中。

entities=( "$entity_path"/*"$file_start"*"$file_end"* )
mv -t "$path" "${entities[@]}"