Solaris系统下读取文件列表移动文件的Shell命令求助(新手)
解决Solaris下读取文件列表移动文件的问题
嘿,作为Shell新手在Solaris上折腾确实容易踩小坑,我来帮你搞定这个移动文件的问题~
你之前写的mv /path/ 'cat filelist.txt' /path2/dest/有个小问题:单引号会把cat filelist.txt当成一个固定的文件名,而不是执行这个命令去读取filelist.txt里的内容,所以Shell会去找名为cat filelist.txt的文件,自然会报错啦。
针对你说的filelist.txt仅含单个文件名的情况,这里提供几个可行的命令:
基础正确写法
用命令替换让Shell先执行cat filelist.txt获取文件名,再拼到路径里:
mv "/path/$(cat filelist.txt)" /path2/dest/
如果你的Solaris系统用的是较老的Shell(比如原始的sh),反引号的兼容性更好:
mv "/path/`cat filelist.txt`" /path2/dest/
这里加双引号是为了防止文件名里有空格、特殊字符时被Shell错误拆分,更稳妥。
处理可能的空白字符
如果filelist.txt里不小心多了换行、空格或者制表符,可以用工具先清理掉这些无关字符:
# 用awk提取纯文件名(自动忽略多余换行) mv "/path/$(awk '{print $0}' filelist.txt)" /path2/dest/
或者用sed精准去除前后空白:
mv "/path/$(sed 's/^[[:space:]]*//;s/[[:space:]]*$//' filelist.txt)" /path2/dest/
额外提醒
- 确保目标路径
/path2/dest已经存在,如果没有可以先执行mkdir -p /path2/dest/创建(-p参数会自动创建多级目录) - 可以先测试一下命令是否正确,比如用
echo代替mv,看看输出的路径是否符合预期:echo "/path/$(cat filelist.txt)"
内容的提问来源于stack exchange,提问作者Raghav Rao
相关产品推荐
相关产品推荐

