2011-07-03 8 views
1

内のファイル/ディレクトリの認識を実現する私は、ファイルにディレクトリのリストを作成bashでスクリプトを書きたいです。すべての行をファイルまたはディレクトリとしてマークする必要があります。bashの

#!/bin/bash 
if [ $# -eq 1 ] 
then 
if [ -d $1 ] 
then 
    touch liste.txt 
    ls -l $1 | grep '^-' >> liste.txt 
    ls -l $1 | grep '^d' >> liste.txt 
fi 
fi 

今私はtはすべてのライン「ファイル」または「ディレクトリ」で印刷する方法を知っているドン:

これは私の未完の試みです。たぶん、これを解決するよりエレガントな方法があります。ここ

挨拶、 Haniball

おかげPavium、

完成スクリプト:

#!/bin/bash 
if [ $# -eq 1 ] 
then 
if [ -d $1 ] 
then 
    rm liste.txt 
    touch liste.txt 
    ls -l $1 | grep '^-' | sed -e "s/^-/File /g" >> liste.txt 
    ls -l $1 | grep '^d' | sed -e "s/^d/Directory /g" >> liste.txt 
fi 
more liste.txt 
fi 

私はそこに、よりエレガントな解決策と確信しています。たぶん、grepが投げ出さすることができますが、私は、パターンに一致する行だけに出力を制限しなければなりませんでした。

挨拶、 Haniball

+0

注意を。 '' ''を使ってファイルに追加することをお勧めします。私が意味するものはほとんど何、[OK]をヒント – pavium

+0

感謝pavium。 「ファイル」と「」ディレクトリと*置き換える*「^ D」、またはそのような何かに - 今、私はあなたが* *「^」置き換えるために 'sed'を使用することをお勧め。 – Haniball

+0

ため – pavium

答えて

2

あなたはpaviumとしてSEDを使用することができ、既に述べました。

ls -l $1 | grep '^-' | sed 's/^/file: /' >> liste.txt 
ls -l $1 | grep '^d' | sed 's/^/directory: /' >> liste.txt 

または1つのコマンドで

ls -l $1 | sed -n -e '/^-/{s/^/file: /p;d;}' -e '/^d/{s/^/directory: /p;d;}' > liste.txt 

それとも、別の何かを行うことができます。第二 `> liste.txt`が最初に上書きされること

for f in $1/* ; do 
    if [ -d "$f" ]; then 
    echo "directory: $f" >> liste1.txt 
    else 
    echo "file: $f" >> liste1.txt 
    fi 
done 
2
(
    find . -maxdepth 1 -mindepth 1 -type f -printf 'file %f\n' | sort 
    find . -maxdepth 1 -mindepth 1 -type d -printf 'dir %f\n' | sort 
) > liste.txt 

しかし、おそらくシンプル:

ls -l --group-directories-first 

は十分でしょうか?

0
stat --printf="%F\t%n\n" * > file.listing