我有以下输入内容。
实体可以是“ 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是我要移动文件的目录。
我认为这是关于空间的问题。
有什么主意吗?
答案 0 :(得分:2)
没有办法对常规的参数扩展进行路径名扩展,但是不能对单词进行拆分,因此将模式放入entity_path
的尝试将失败。要么直接使用模式,
mv -t "$path" "$entity_path"/*"$file_start"*"$file_end"*
或将路径名扩展的结果存储在数组中。
entities=( "$entity_path"/*"$file_start"*"$file_end"* )
mv -t "$path" "${entities[@]}"