gpt4 book ai didi

linux - 列出目录及其文件,将它们分组在一行上以进行标记化

转载 作者:太空宇宙 更新时间:2023-11-04 04:43:58 25 4
gpt4 key购买 nike

我想在 bash 脚本中将目录名称及其文件分组。例如,如果我输入 ls/home/maindir/*

我得到home/maindir/dir1: file1 file2\n file3
home/maindir/dir2: file1 file2

包含文件的目录没有用指定的分隔符分隔,因为有时同一目录中的 file1 和 file2 之间有换行符,所以我想用分隔符将目录名及其文件列表全部放在一行上。带换行符的输出示例:

home/maindir/dir1: file1 file2 file3\n
home/maindir/dir2: file1 file2\n
home/maindir/dir3: file1 file2 file4\n

最佳答案

我最初使用了不带引号的插值技巧。例如,如果文件中有字符串,每行一个,并且您希望它们水平化,则不必使用粘贴 -

名为 foo 的文件:

a
b
c

然后你可以说:

echo $(<foo)

你会得到

a b c

但这可能会导致文件名出现问题,特别是如果它们嵌入了特殊字符或空格。

感谢 Gordon Davisson 进行了简单升级!

for d in /home/maindir/*    # includes full path each time
do [[ -d "$d" ]] || continue # ignore nondirectories
cd "$d" # go there to make filenames path-bare
echo "$d:" *
done

请注意,这仍然包括子目录。你需要跳过那些吗?如果你想更加小心 -

for d in /charter/apps/*
do [[ -d "$d" ]] || continue
cd "$d"
dir="$d: "
hit=0
for f in *
do if [[ -f "$f" ]]
then hit=1
dir="$dir $f "
fi
done
(( $hit )) && printf "$dir\n"
done

这个也应该适用于带有嵌入空格和c的文件。

关于linux - 列出目录及其文件,将它们分组在一行上以进行标记化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50493654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com