在Shell脚本中循环时如何获取目录和文件名

11 浏览
0 Comments

在Shell脚本中循环时如何获取目录和文件名

我正在对目录中的文件进行循环,并且我需要在每一步中获取当前目录和文件名。

for f in /path/to/*/*.ext
do
  command "$d" "f" #! 这里我们将它们作为参数发送
done

我还需要没有扩展名(.ext)的文件名。我该如何处理?

0
0 Comments

问题的出现原因:在Shell脚本中循环时,如何获取目录和文件名。

解决方法:

在Bash中,可以使用以下代码来解决这个问题:

shopt -s nullglob
for f in /path/to/*/*.ext; do
    my_command "${f%/*}" "${f##*/}"
done

使用shopt -s nullglob命令是强烈推荐的,这样当没有匹配项时,通配符/path/to/*/*.ext会扩展为空,从而循环不会执行,不会使用随机的原文参数/path/to/**.ext来执行my_command命令。

参考链接:Shell Parameter Expansion

0
0 Comments

在Shell脚本中循环时如何获取目录和文件名

在Shell脚本中,我们经常需要在循环中处理多个文件。有时候,我们需要获取每个文件的目录和文件名,以便进行进一步的操作。本文将介绍在Shell脚本中获取目录和文件名的问题及解决方法。

问题描述:

在Shell脚本中,我们希望在循环中获取每个文件的目录和文件名。

解决方法:

有几种方法可以在Shell脚本中获取目录和文件名。下面将介绍两种常用的方法。

方法一:使用basename和dirname命令

for f in /path/to/*/*.ext
do
  command "$(dirname "$f")" "$(basename "$f")" 
done

上述代码中,`$f`代表文件路径,`$(dirname "$f")`获取文件的目录名,`$(basename "$f")`获取文件的文件名。你可以在`command`中替换为你需要的操作。

方法二:使用awk命令删除文件扩展名

for f in /path/to/*/*.ext ;do
   echo "$f"|awk -F\/ '{a=$NF;$NF="";gsub(".ext","",a)}{print $0" "a}' OFS=\/
done

上述代码中,`$f`代表文件路径,`awk -F\/`用于设置分隔符为`/`,`a=$NF`获取文件名,`$NF=""`将最后一个字段(即文件名)置为空,`gsub(".ext","",a)`删除文件名中的`.ext`扩展名,`{print $0" "a}`打印目录名和文件名。

结论:

通过使用basename和dirname命令或awk命令,我们可以在Shell脚本中循环时获取目录和文件名。这些方法可以帮助我们更方便地处理多个文件,并进行进一步的操作。

0