我想在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
现在我不知道如何在每行“文件”或“目录”中打印。也许有更优雅的方法来解决这个问题。
问候, 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 :(得分: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
就够了吗?
答案 1 :(得分:2)
你可以使用 sed 作为pavium已经说过。
ls -l $1 | grep '^-' | sed 's/^/file: /' >> liste.txt
ls -l $1 | grep '^d' | sed 's/^/directory: /' >> liste.txt
或者在一个命令中:
ls -l $1 | sed -n -e '/^-/{s/^/file: /p;d;}' -e '/^d/{s/^/directory: /p;d;}' > 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 :(得分:0)
stat --printf="%F\t%n\n" * > file.listing