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

时间:2019-03-04 14:28:00

标签: bash move

我有以下输入内容。

实体可以是“ MG SOCRATES”,“ VALIND”,“ SUSBTECT”

此实体具有以下目录。

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

示例:

/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是我要移动文件的目录。

我认为这是关于空间的问题。

有什么主意吗?

1 个答案:

答案 0 :(得分:2)

没有办法对常规的参数扩展进行路径名扩展,但是不能对单词进行拆分,因此将模式放入entity_path的尝试将失败。要么直接使用模式,

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

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

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