"find "命令,目录可变

问题描述 投票:0回答:4

我试图列出一个由变量 DIR. 到目前为止,我的代码是这样的。

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

变量 DIR 已经被定义了。我不知道这里的语法是什么。

bash variables find
4个回答
1
投票
ls "${DIR}/*.txt"

或者

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

应该可以做到这一点。第一条只列出了 *.txt 目录本身的文件,第二个也是 *.txt 子目录下的文件。


0
投票

我想你是想对所有在 $DIR 或其子目录。和往常一样,有不同的解决方案。

这个

$ 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

或this:

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

或者this:

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

或者... 100个额外的解决方案。


-1
投票

不知道你想要什么。

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

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

如果你想对这个文件做一件简单的事情,你可以使用 find's -exec 函数。

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

或者你可以使用一个循环。

for f in `find $DIR -name "*.txt"`; do
    wc -l $f
    mv $f /some/other/dir/
fi

:正如 @mauro 所指出的那样,在以下情况下,这样做是行不通的: DIR 或文件名包含空格。

干杯

© www.soinside.com 2019 - 2024. All rights reserved.