带扩展名的文件循环无效

时间:2019-10-08 09:30:13

标签: linux bash loops

我在Name*.txt中有几个/home/user/my/path/to/my/data/文件,以及其他具有不同扩展名的文件。我想循环遍历它们,然后在代码中使用各个文件名,因此像this这样的常见解决方案将不起作用,因为每个循环中的变量'$ f'将整个路径与文件名。我需要它们分别来执行类似下面的“示例任务”。我的尝试:

尝试#1:

#!/bin/bash

datapath="/home/user/my/path/to/my/data/"
outpath="/home/user/my/path/to/my/outputs/"

for f in $(ls $datapath"Name*.txt"); do
        echo $f
        ...
        cp $datapath$f $outpath"example_task"${f:0:10}
done

这不起作用: ls: cannot access /home/user/my/path/to/my/data/Name*.txt: No such file or directory。 尽管在终端上运行ls /home/user/my/path/to/my/data/Name*.txt可以正常工作。我不明白为什么。

尝试#2:

#!/bin/bash

datapath="/home/user/my/path/to/my/data/"
outpath="/home/user/my/path/to/my/outputs/"

for f in $datapath"Name*.txt"; do
        echo $f
        ...
        cp $datapath$f $outpath"example_task"${f:0:10}
done

此处,每个$f都包含文件ls Name*.txt的完整列表,这些列表通常会返回,而不是一次一个都不会返回。

我该怎么做?任何建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

也许我在这里走错了路,但这对我有用。

#!/bin/bash

datapath="/home/user/my/path/to/my/data/" 
outpath="/home/user/my/path/to/my/outputs/"

cd $datapath

for f in ./*.txt; do
        file=$(echo $f | cut -d '/' -f 2)

        echo $file
        ...
        cp $f $outpath"example_task"$file 
done
cd 
相关问题