我有一定数量的文件始终包含相同的名称但扩展名不同,例如sample.dat
,sample.txt
等。
我想创建一个脚本,查找存在sample.dat
的位置,然后将所有名称为sample*.*
的文件移动到另一个目录中。
我知道如何用ls *.dat | sed 's/\(.*\)\..*/\1/'
来识别它们,但是我想与|| mv
之类的东西(第一部分的结果)*.* /otherdirectory/
答案 0 :(得分:-1)
您可以使用此bash一线式:
for f in `ls | grep YOUR_PATTERN`; do mv ${f} NEW_DESTINATION_DIRECTORY/${f}; done
迭代操作ls | grep
的结果(这是您要移动的文件的列表),然后将每个文件移动到新的目的地。
答案 1 :(得分:-1)
像这样简单的事情吗?
dat_roots=$(ls *.dat | sed 's/\.dat$//')
for i in $dat_roots; do
echo mv ${i}*.* other-directory
done
这将破坏包含空格的文件名,因此请小心。
或者如果空格是一个问题,这可以完成工作,但可读性较差。
ls *.dat | sed 's/\.dat$//' | while read root; do
mv "${root}"*.* other-directory
done
答案 2 :(得分:-1)
未经测试,但这应该可以完成工作:
shopt -s nullglob
for f in *.dat
do
mv ${f%.dat}.* other-directory
done
如果没有dat文件,则设置nullglob选项可确保不执行loob。如果将此代码用作较大脚本的一部分,则可能需要在以后取消设置(shopt -u nullglob
)。