的目錄被設定爲全路徑遍歷目錄呼應其內容
for e in "$DIR_0" "$DIR_1" "$DIR_2"
do
for i in $e/*
do
echo $i
done
每行的輸出是完整路徑變量。我只想要每個文件的名稱
的目錄被設定爲全路徑遍歷目錄呼應其內容
for e in "$DIR_0" "$DIR_1" "$DIR_2"
do
for i in $e/*
do
echo $i
done
每行的輸出是完整路徑變量。我只想要每個文件的名稱
您正在尋找basename
。
如果你真的不希望遞歸可以實現更簡潔與此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{} \;
到用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$"
它永遠不會結束。它陷入遞歸中。 – 2010-07-17 14:30:16
這是猛砸相當於basename
的:
echo "${i##*/}"
它剝去之前的一切,包括最後的斜線。
目前我更喜歡這個解決方案,因爲它似乎是最簡單的解決方案。 我有足夠的想法。感謝所有的職位。 – tornow 2010-07-17 14:27:05
又見POSIX兼容的Bash函數來代替基名&目錄名稱的位置:
好的,我會看看基名。謝謝 – tornow 2010-07-17 14:08:44