用于根据扩展标准移动文件的脚本

时间:2018-07-19 13:07:17

标签: linux bash shell

我有一定数量的文件始终包含相同的名称但扩展名不同,例如sample.datsample.txt等。 我想创建一个脚本,查找存在sample.dat的位置,然后将所有名称为sample*.*的文件移动到另一个目录中。

我知道如何用ls *.dat | sed 's/\(.*\)\..*/\1/'来识别它们,但是我想与|| mv之类的东西(第一部分的结果)*.* /otherdirectory/

连接起来

3 个答案:

答案 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)。