我在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
的完整列表,这些列表通常会返回,而不是一次一个都不会返回。
我该怎么做?任何建议将不胜感激。
答案 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