为什么我无法仅使用 echo 将目录内容(包括隐藏文件)移动到文件?

为什么我无法仅使用 echo 将目录内容(包括隐藏文件)移动到文件?

我有一个名为的目录,我想使用 ONLYMusique保存文件列表。nom.txtecho

不过,我还想复制目录的隐藏文件,并用换行符 ( \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 '.*'

您是否希望路径名位于一行上,以空格分隔,然后通过管道传输findto的结果paste

find Musique -maxdepth 1 | paste -s -d ' ' -

请注意,生成的路径名列表本身是无用的,除了用于查看之外。例如,考虑到 Unix 系统上的文件名可能包含空格、制表符和换行符,可靠地区分文件名将是一项挑战。

如果您想对每个路径名执行某些操作,通常可以find使用其-exec谓词从命令中执行此操作。

答案3

我猜你想要这样的东西:

echo -e Musique/* '\n' Musique/.* >nom.txt

相关内容