2010-07-17 31 views
0

的目錄被設定爲全路徑遍歷目錄呼應其內容

for e in "$DIR_0" "$DIR_1" "$DIR_2" 
do 
    for i in $e/* 
    do 
     echo $i 
    done 

每行的輸出是完整路徑變量。我只想要每個文件的名稱

+0

好的,我會看看基名。謝謝 – tornow 2010-07-17 14:08:44

回答

2

您正在尋找basename

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{} \; 
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$" 
+0

它永遠不會結束。它陷入遞歸中。 – 2010-07-17 14:30:16

2

這是猛砸相當於basename的:

echo "${i##*/}" 

它剝去之前的一切,包括最後的斜線。

+0

目前我更喜歡這個解決方案,因爲它似乎是最簡單的解決方案。 我有足夠的想法。感謝所有的職位。 – tornow 2010-07-17 14:27:05