bash - 使用 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 是我要移动文件的目录。
我认为是空间的问题。
任何想法?
解决方案
没有办法让常规参数扩展经历路径名扩展,但不进行分词,因此您尝试放入模式entity_path
将失败。要么直接使用模式,
mv -t "$path" "$entity_path"/*"$file_start"*"$file_end"*
或将路径名扩展的结果存储在数组中。
entities=( "$entity_path"/*"$file_start"*"$file_end"* )
mv -t "$path" "${entities[@]}"
推荐阅读
- d3.js - attr() 不会更改属性,除非我通过匿名函数返回它
- javascript - 问题倍数计数器编号同一页
- javascript - 清除 Buefy 日期选择器
- postgresql - jooq UTC localdatetime 在保存和加载之间更改
- c# - 如何解决:无法将 system.collections.generic.list 隐式转换为 system.collections.generic.ienumerable
- php - 将数据表中的数据添加到 laravel 中的模态
- talend - 根据 DB 表完成状态在 Talend 上执行子作业
- swift - Data.subdata(in:) 结果为 EXC_BAD_INSTRUCTION
- python - 如何使用 wordnet.synsets() 获取列表中多个单词的定义
- python - 对每个唯一 ID 的电话呼叫后发生操作的次数求和