带有变量目录的“find”命令

时间:2016-01-25 03:29:05

标签: bash variables find

我正在尝试列出变量DIR给出的目录中的文件。到目前为止,我的代码看起来像这样:

for i in `find $DIR -name "*.txt"

已定义变量DIR。我不确定这里的语法是什么。

3 个答案:

答案 0 :(得分:1)

ls "${DIR}/*.txt"

find "${DIR}" -name "*.txt"

应该做的伎俩。第一个文件仅在目录中列出*.txt个文件,第二个文件在子目录中也列出*.txt个文件。

答案 1 :(得分:0)

我想你想对$DIR和/或其子目录下扩展名为“txt”的所有文件执行一个给定的操作。像往常一样,有不同的解决方案。

这一个:

$ for i in $(find "$DIR" -name \*.txt) ; do echo "Do something with ${i}" ; done
如果文件路径(文件本身或一个子目录)包含空格,

将无效

但你可以用这个:

$ find "$DIR" -type f -name \*.txt | while read i ; do echo "Do something with ${i}" ; done

或者这个:

$ find "$DIR" -type f -name \*.txt -print0 | xargs -0 -I {} echo "Do something with {}"

或者这个:

$ find "$DIR" -type f -name \*.txt -exec echo "Do something with {}" \;

或......另外100个解决方案。

答案 2 :(得分:-1)

不确定你想要什么。

find $DIR -name "*.txt" -print

将列出以.txt结尾且位于$DIR或其子目录中的所有文件。您可以省略-print,因为这是默认行为。

如果你想对这个文件做一件简单的事情,你可以使用find的{​​{1}}函数:

-exec

或者您可以使用循环:

find $DIR -name "*.txt" -exec wc -l {} \;

注意:正如@mauro有用地指出的那样,如果for f in `find $DIR -name "*.txt"`; do wc -l $f mv $f /some/other/dir/ fi 或文件名包含空格,这将不起作用。

干杯