5

私は次のスクリプトを持っています:

#!/bin/bash

ls -1 | while read d
do 
    [[ -f "$d" ]] && continue
    echo $d
    cd $d
done

問題は、各CDに「[パス]:そのようなファイルやディレクトリはありません」と表示されていることです。なぜですか。私がリストしたのでフォルダが存在します...

4

4 に答える 4

8

コードに2つの問題があります。

  1. ディレクトリをテストしません。
  2. dirに入るcdと、そこにとどまります。

これを試してください:

#!/bin/bash

ls -1 | while read d
do 
    test -d "$d" || continue
    echo $d
    (cd $d ; echo "In ${PWD}")
done
于 2012-05-04T09:56:35.953 に答える
6

あなたはlsそのように使うべきではありません。

#!/bin/bash

for d in */
do 
    [[ ! -d "$d" ]] && continue
    echo "$d"
    cd "$d"
    # do something
    cd "$OLDPWD"
done
于 2012-05-04T11:05:30.300 に答える
0

問題は、スクリプトの作業ディレクトリを変更することです。これは、2番目cdが前に入力したサブディレクトリで実行されることを意味しますcd

dir=`pwd`
ls -1 | while read d
do 
    [[ -f "$d" ]] && continue
    cd "$dir"
    echo $d
    cd $d
    #....
done
于 2012-05-04T09:30:05.310 に答える
0

何を達成しようとしているのかわからない。ある種の再帰的なdicトラバーサルを実行しますか?

これが私がやる方法です:

#!/bin/bash                                                                                                                                                                                                                            
CWD="$(pwd)" #save starting directory
ls -1 | while read d
do
    [[ ! -d "$d" ]] && continue
    cd "$d"
    echo "Changed to directory" $d
    #Now you can do someting in the sub-directory
    cd "$CWD" #Change back to old directory
done
于 2012-05-04T10:54:47.457 に答える