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

时间:2015-02-10 12:20:26

标签: linux bash shell

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

for f in /path/to/*/*.ext
do
  command "$d" "f" #! Here we send those two as parameters
done

我还需要没有扩展名(.ext)的文件名。我该怎么做?

2 个答案:

答案 0 :(得分:3)

您可以使用basenamedirname

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

使用awk删除.ext的另一种方法:

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

答案 1 :(得分:1)

在Bash中,使用以下内容:

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

请参阅Shell Parameter Expansion

强烈建议shopt -s nullglob,以便glob /path/to/*/*.ext扩展为空(因此循环不会被执行,因此my_command不会随随机逐字参数/path/to/*执行{ {1}}和*.ext)如果没有匹配项。