将文件名目录复制到.txt文件的脚本

时间:2017-12-11 14:25:31

标签: bash shell sh

这应该相当容易,我理解它的逻辑,但我的shell脚本是初学者。

基本上,我有一个包含一百个文件的目录,我想将它们的文件名复制到.txt文件中。每个文件名一行。我知道我想要一个循环来存储目录中的所有文件,将名称复制到文本文件,重复直到没有更多文件但不确定如何在.sh文件中写出来。

(另外,出于纯粹的好奇心,我将如何省略文件扩展名?在这种情况下,他们是所有相同的扩展名,但可能在将来他们可能不会,并且我需要扩展权限现在我可能不会在将来。我假设可能有一个标志,或者我会使用'。'作为分隔符来停止复制?)

提前致谢!

3 个答案:

答案 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