我目前正在编写一个打印目录的脚本,每个目录旁边列出该特定目录的内容并用逗号分隔。
它应该是这样的:
这是我的剧本:
#!/bin/bash
for i in $(ls -d */)
do
echo "Directory:" ${i%%/}
echo "Files:" $(ls -m *.*)
done
它列出了应该执行的文件夹,但是当涉及到文件时,它只为每个文件夹列出了相同的两个文件
我还考虑过将另一个for循环放入for循环但是我不确定是否有必要
有人能指出我正确的方向吗?由于
答案 0 :(得分:1)
您的主要问题在于,这不是MS-DOS,文件名不一定包含.
。使用*
匹配所有文件。
此外,无需使用ls
来生成所有目录的列表,bash
可以使用*/
完成此操作。
此外,ls
不需要参数来列出所有文件,因此这可以解决问题:
for i in */
do
echo -n "Directory: ${i%%/} "
cd "$i" && { echo "Files: $(ls -m)"; cd -; }
done
答案 1 :(得分:-2)
您可以使用以下代码,该代码适用于Bash。
#!/bin/bash
all_dirs=$( find ./ -type d 2>/dev/null );
while read dir
do
files=$( find $dir -maxdepth 1 -type f -printf "%f\n" | tr '\n' ',' | sed 's/,$//g' );
if [ ! -z $files ]
then
echo "Directory : $dir - File : $files"
else
echo "Directory : $dir IS EMPTY!!"
fi
done <<< "$all_dirs"
问候!