这应该相当容易,我理解它的逻辑,但我的shell脚本是初学者。
基本上,我有一个包含一百个文件的目录,我想将它们的文件名复制到.txt文件中。每个文件名一行。我知道我想要一个循环来存储目录中的所有文件,将名称复制到文本文件,重复直到没有更多文件但不确定如何在.sh文件中写出来。
(另外,出于纯粹的好奇心,我将如何省略文件扩展名?在这种情况下,他们是所有相同的扩展名,但可能在将来他们可能不会,并且我需要扩展权限现在我可能不会在将来。我假设可能有一个标志,或者我会使用'。'作为分隔符来停止复制?)
提前致谢!
答案 0 :(得分:1)
对于第一部分,你可以做
ls <dirname> > files.txt
答案 1 :(得分:1)
使用ls
:
ls -1 [directory] > filename.txt
注意标记-1
,它告诉ls
输出文件名每行一个,无论输出是什么。如果stdout是tty,ls
通常会像ls -C
一样,否则就像ls -1
一样。明确指定此标志会强制ls
每行输出一个。
如果你想手动完成,这就是一个例子:
#!/bin/sh
cd [directory]
for i in *
do
echo "$i"
done > filename.txt
要省略扩展名,您可以使用字符串替换:
echo "${i%.*}"
答案 2 :(得分:1)
我将ls
别名为ls -F
,因此为了避免输出中出现任何无关的字符,您可以
printf "%s\n" * > ../filename.txt
我将输出txt文件放在不同的目录中,因此文件列表不包含&#34; filename.txt&#34;
如果您想省略文件扩展名:
printf "%s\n" * | sed 's/\.[^.]*$//' > ../filename.txt