目录是设置为完整路径的变量
for e in "$DIR_0" "$DIR_1" "$DIR_2"
do
for i in $e/*
do
echo $i
done
每行的输出是完整路径。我只想要每个文件的名称
答案 0 :(得分:2)
您正在寻找basename
。
答案 1 :(得分:2)
这是Bash相当于basename
:
echo "${i##*/}"
它删除了所有内容,包括最后一个斜杠。
答案 2 :(得分:0)
如果你真的不想递归,你可以用这个find命令更简洁地实现:
find "$DIR_0" "$DIR_1" "$DIR_2" -type f -maxdepth 1 -exec basename{} \;
如果您希望递归子目录,只需省略maxdepth:
find "$DIR_0" "$DIR_1" "$DIR_2" -type f -exec basename{} \;
答案 3 :(得分:0)
使用bash
以递归方式移动目录试试这个你可以找到它here
#! /bin/bash
indent_print()
{
for((i=0; i < $1; i++)); do
echo -ne "\t"
done
echo "$2"
}
walk_tree()
{
local oldifs bn lev pr pmat
if [[ $# -lt 3 ]]; then
if [[ $# -lt 2 ]]; then
pmat=".*"
else
pmat="$2"
fi
walk_tree "$1" "$pmat" 0
return
fi
lev=$3
[ -d "$1" ] || return
oldifs=$IFS
IFS=""
for el in $1/ *; do
bn=$(basename "$el")
if [[ -d "$el" ]]; then
indent_print $lev "$bn/"
pr=$( walk_tree "$el" "$2" $(( lev + 1)) )
echo "$pr"
else
if [[ "$bn" =~ $2 ]]; then
indent_print $lev "$bn"
fi
fi
done
IFS=$oldifs
}
walk_tree "$1" "\.sh$"
答案 4 :(得分:0)
另请参阅POSIX兼容的Bash函数以替换basename&amp; dirname在这里: