标签: find

Bash:如何从命令的输出中一次读取一行?

我正在尝试使用 .bash 文件读取 bash 中命令的输出while loop

while read -r line
do
    echo "$line"
done <<< $(find . -type f)
Run Code Online (Sandbox Code Playgroud)

我得到的输出

ranveer@ranveer:~/tmp$ bash test.sh
./test.py ./test1.py ./out1 ./test.sh ./out ./out2 ./hello
ranveer@ranveer:~/tmp$ 
Run Code Online (Sandbox Code Playgroud)

在这之后我试过了

$(find . -type f) | 
while read -r line
do
    echo "$line"
done 
Run Code Online (Sandbox Code Playgroud)

但它产生了一个错误test.sh: line 5: ./test.py: Permission denied

那么,我如何逐行阅读它,因为我认为目前它正在一次吞食整行。

所需输出:

./test.py
./test1.py
./out1
./test.sh
./out
./out2
./hello
Run Code Online (Sandbox Code Playgroud)

shell bash pipe find

63
推荐指数
3
解决办法
15万
查看次数

获取包含名称包含字符串的文件的子目录列表

如何获取包含名称与特定模式匹配的文件的子目录列表?

更具体地说,我正在寻找包含文件名中出现字母“f”的文件的目录。

理想情况下,该列表不会有重复项,并且只包含没有文件名的路径。

command-line find

63
推荐指数
3
解决办法
9万
查看次数

如何为每个查找结果运行特定命令?

如何为使用该find命令找到的每个文件运行特定命令?出于问题的目的,可以说我只想删除find.

command-line find

62
推荐指数
3
解决办法
8万
查看次数

查找没有扩展名的文件

假设我有:

foo.txt
bar
baz.ooo
Run Code Online (Sandbox Code Playgroud)

如果我使用,ls -1 !(*.*)那么我只会得到bar输出。太好了,现在我希望找到相同的结果 - 有些find -regex可以完成这项工作。

笔记:

find -name !(*.*)不是答案,因为!(*.*)它仍然是我无法使用的 Bash glob。

shell bash find wildcards

61
推荐指数
1
解决办法
5万
查看次数

如何使用find重命名多个文件

我想使用以下find命令重命名多个文件(file1 ... fileN 到 file1_renamed ... fileN_renamed):

find . -type f -name 'file*' -exec mv filename='{}' $(basename $filename)_renamed ';'
Run Code Online (Sandbox Code Playgroud)

但收到此错误:

mv: cannot stat ‘filename=./file1’: No such file or directory
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为文件名不被解释为 shell 变量。

shell find

61
推荐指数
6
解决办法
11万
查看次数

在多个文件夹名称中查找文件

我正在尝试列出、和中的所有文件dir1,这些文件可能位于我使用该命令的子目录中的任何位置。我尝试了以下但没有成功:dir2dir3dir4cwdfind

find . -type f -regextype posix-egrep -regex 'dir1/.+|dir2/.+|dir3/.+|dir4/.+'
Run Code Online (Sandbox Code Playgroud)

我也试过posix-extended了。如何列出这些文件?

bash find regular-expression

60
推荐指数
2
解决办法
11万
查看次数

管道 xargs 后的管道命令

HP-UX ***** B.11.23 U ia64 **** 无限制用户许可证

find . -type d -name *log*?|?xargs ls -la
Run Code Online (Sandbox Code Playgroud)

给我目录名称(包含log在目录名称中的名称),后跟该目录中的所有文件。

目录?/var/opt/SID/application_a/log/,?/var/opt/SID/application_b/log/,?/var/opt/SID/application_c/log/等等包含日志文件。

我只希望ls命令列出两个最新的日志文件,我通常使用ls -latr?|?tail -2.

输出必须是这样的..

find . -type d -name *log*?|?xargs ls -la
Run Code Online (Sandbox Code Playgroud)

find . -type d -name *log*?|?xargs ls -la?|?tail -2没有给我上面的结果。我得到的是最后两个find . -type d -name *log*?|?xargs ls -la命令文件的列表 。

那么我可以在管道之后管道命令xargs吗?我如何查询,以获取上述格式的结果文件列表?

/var/opt/SID/application_a/log/
-rw-rw-rw-   1 user1    user1      59698 Jun 11  2013 log1
-rw-rw-rw-   1 user1    user1      59698 Jun …
Run Code Online (Sandbox Code Playgroud)

shell pipe find xargs

58
推荐指数
3
解决办法
10万
查看次数

如何从查找程序中删除“权限被拒绝”打印输出语句?

代码

find / -name netcdf
Run Code Online (Sandbox Code Playgroud)

输出

find: `/root/.dbus': Permission denied
find: `/root/.gconf': Permission denied
find: `/root/.gconfd': Permission denied
find: `/root/.gnome': Permission denied
find: `/root/.gnome2': Permission denied
find: `/root/.gnome2_private': Permission denied
Run Code Online (Sandbox Code Playgroud)

find

56
推荐指数
3
解决办法
2万
查看次数

如何递归列出子目录?

显而易见的

ls -dR
Run Code Online (Sandbox Code Playgroud)

不起作用。

我目前正在使用

find /path/ -type d -ls
Run Code Online (Sandbox Code Playgroud)

但输出不是我需要的(子文件夹的简单列表)

有出路吗?

ls directory find

56
推荐指数
3
解决办法
19万
查看次数

在父目录而不是子目录中查找

我嵌套在一个文件树的深处,我想找到哪个父目录包含一个文件。

例如,我在一组嵌套的 GIT 存储库中,想要找到.git控制我当前所在文件的目录。我希望像

find -searchup -iname ".git"
Run Code Online (Sandbox Code Playgroud)

shell find

55
推荐指数
5
解决办法
3万
查看次数

标签 统计

find ×10

shell ×5

bash ×3

command-line ×2

pipe ×2

directory ×1

ls ×1

regular-expression ×1

wildcards ×1

xargs ×1