首页 > 解决方案 > 使用 mv 命令移动包含空格的文件

问题描述

我有以下输入。

实体可以是 '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/SUSBTECT/2018-01-01_2018-12-31

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

我的代码正确执行但实体“MG SOCRATES”失败,因为移动命令无法解释的空间。

我的代码:

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

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

我认为是空间的问题。

任何想法?

标签: bashmove

解决方案


没有办法让常规参数扩展经历路径名扩展,但不进行分词,因此您尝试放入模式entity_path将失败。要么直接使用模式,

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

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

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

推荐阅读