我有一个名为的目录,我想使用 ONLYMusique
保存文件列表。nom.txt
echo
不过,我还想复制目录的隐藏文件,并用换行符 ( \n
) 将它们与目录的“正常”文件分开。
我尝试了这些命令,但它不起作用,我不知道为什么它们不起作用? :
echo -e Musique/ \n.* > nom.txt
echo -e \n.* Musique/ > nom.txt
echo -e /Musique \n.* > nom.txt
有人能给我解释一下吗?谢谢
答案1
如果我理解正确,在获得进一步信息之前,您可以使用以下命令:
$ LC_ALL=C ls -1Ar | sed '0,/^\./s/^\./\n./' > nom.txt
$ cat nom.txt
b.txt
c.txt
.foo
.bar
答案2
不带引号的两个字符子字符串\n
被 shell 更改为n
,这意味着每个echo
命令行都会将字符串打印n.*
到文件nom.txt
,前面或后面是字符串Musique/
(或/Musique
)。如果当前目录中有与该模式匹配的文件n.*
,则该命令会将这些文件提供给echo
.
由于您正在使用echo -e
,大概在 中bash
,任何作为包含 C 转义序列的参数给出的名称(例如\n
或)都将在打印之前\t
进行修改。echo
您没有说,但可以公平地假设您想要的并不是专门带有echo
.相反,您似乎想要列出目录中的隐藏名称和非隐藏名称、目录和其他文件的路径名,Musique
包括目录名称本身。
使用 列出目录下的所有路径名最简单find
。
find Musique
上面的命令将递归地遍历给定的搜索路径,并在其自己的行上输出每个找到的路径名。如果您想停止find
递归到子目录,请添加-maxdepth 1
到命令末尾(假设您正在使用最近的find
实现,例如在 Linux 系统上)。
仅针对非隐藏名称执行此操作,
find Musique ! -name '.*'
或仅适用于隐藏名称,
find Musique -name '.*'
您是否希望路径名位于一行上,以空格分隔,然后通过管道传输find
to的结果paste
。
find Musique -maxdepth 1 | paste -s -d ' ' -
请注意,生成的路径名列表本身是无用的,除了用于查看之外。例如,考虑到 Unix 系统上的文件名可能包含空格、制表符和换行符,可靠地区分文件名将是一项挑战。
如果您想对每个路径名执行某些操作,通常可以find
使用其-exec
谓词从命令中执行此操作。
答案3
我猜你想要这样的东西:
echo -e Musique/* '\n' Musique/.* >nom.txt