Bash查找文件和显示路径功能

时间:2014-02-13 14:48:01

标签: bash command-line terminal

我正在我的.bashrc文件中编写一个函数,它帮助我根据作为参数传递给函数的字符串查找文件:

# ~/.bashrc
function search {
    find . -iname "*$1*" -printf "%f\n"
}

这个功能很好。它打印出我所在目录下具有给定字符串的所有文件,以及所有子目录中具有相同给定字符串的所有文件。只是打印出每个文件而不是它的路径。

例如,如果我有一个包含某些子文件夹和文件的文件夹,如果它们打印出每个文件的路径(如果它们位于任何子文件夹下),那么这个功能会更有帮助。

F.ex。如果我有一个名为Folder/的文件夹和一些名为whatever_num并且正在运行search thisandthat的子文件夹会吐出一个类似这样的列表:

$ search thisandthat
some-file-containing-thisandthat-in-its-filename.ext
whatever_1/path/to/some-file-containing-thisandthat-in-its-filename.ext
whatever_2/path/to/some-file-containing-thisandthat-in-its-filename.ext

所以我的问题是:如何修改我的搜索功能,以便打印出我可能要搜索的文件的路径?

谢谢!

3 个答案:

答案 0 :(得分:2)

function search {
    find `pwd` -iname "*$1*" 
}

答案 1 :(得分:1)

将查找行更改为:

find . -iname "*$1*" -printf "$(pwd)/%P\n"

答案 2 :(得分:0)

感谢@JKB和@ acro444。他们的回答帮助我修改了我的搜索功能。我发布了自己的答案,因为我决定采用与他们发布时略有不同的解决方案,但这要归功于他们的贡献:

# ~/.bashrc
function search {
    find . -iname "*$1*" -printf "%P\n"
}

我是这样做的,因为我不关心在路径的其余部分前面一直看到/home/myusername/...。我知道我在/home/username/somefolder目录中并且始终/home/username/.....看到可能出现的每个文件只是太多“噪音”我认为并且没有必要。

再次感谢您的帮助!

干杯!