gpt4 book ai didi

linux - 循环带有扩展名的文件不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 04:50:55 27 4
gpt4 key购买 nike

我在 /home/user/my/path/to/my/data/ 中有几个 Name*.txt 文件,以及具有不同扩展名的其他文件。我想循环它们,然后在代码中使用各个文件名,因此常见的解决方案如 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:无法访问/home/user/my/path/to/my/data/Name*.txt:没有这样的文件或目录。尽管在终端上运行 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 通常返回的文件的完整列表,而不是像人们期望的那样一次一个。

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

最佳答案

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

#!/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

关于linux - 循环带有扩展名的文件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58283668/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com