好吧,我想你可以在这个平台上找到几十个问题,如何通过管道find 输出到sed,但到目前为止我还没有找到任何相反的方向。我想要做的是修改我的输入,然后将其传递给find.
假设我想执行以下操作,以避免输入那些繁琐的星号通配符,从而使自己的生活更轻松。(我希望很明显,跟在 here-string 运算符后面的表达式<<<最终计划被参数替换,例如$1,在稍后的脚本中。下面的行仅用于演示。)
$ sed 's/ /\*/g' <<< ' foo bar baz ' | find . -type f -iname -
Run Code Online (Sandbox Code Playgroud)
即-在此一衬套的端部实际上应该使用的输出sed为作为输入find; 然而,将find部分扩展到
... find -D tree . -type f -iname - ...
Run Code Online (Sandbox Code Playgroud)
显示该参数未传递给find. 也许您根本无法将预处理输入传递给find使用管道?
为什么 POSIXfind命令中的一个参数添加一个单连字符表示多字符参数名称,而大多数其他程序使用单连字符表示多个单字符标志,而双连字符表示多个字符的单个参数名称?
这似乎不一致,我很好奇
A. 为什么它真的不矛盾,或者
B. 那个决定的历史。
设置 Linux 内核运行时参数的规定方法是什么?我有时看到人们会将这些设置在诸如/etc/rc.local.
这真的是这样做的正确方法吗?
我正在玩-execfind 命令的标志。我正在尝试使用该标志来打印文件的扩展名,使用相当新的 Linux 发行版。
从简单开始,这有效:
find . -type f -exec echo {} \;
Run Code Online (Sandbox Code Playgroud)
尝试使用方便的 Bash 字符串功能失败:
find . -type f -exec echo "${{}##*.}" \; (bad substitution)
Run Code Online (Sandbox Code Playgroud)
那么正确的做法应该是什么呢?
我一直在通读bash手册页,并通读我的系统 (CentOS 6.7) 上的脚本,并随时在bash手册页中查找内容。这是一个很好的练习;例如,我学习了如何/etc/profile检查当-i位置参数中实际上没有选项时是否设置了选项(所以getopts不起作用)。
然而,下面这句话让我完全难住了;我在bash手册页中找不到任何解释它可以做什么的内容:
LESSOPEN="${LESSOPEN-||/usr/bin/lesspipe.sh %s}"
Run Code Online (Sandbox Code Playgroud)
(这是 中一行的一部分/etc/profile.d/less.sh。)
我只是错过了什么man bash吗?
是的,我是缺少的东西man bash:上面的解释${parameter:-word},它说Omitting the colon results in a test only for a parameter that is unset. 这是缺少的部分。(顺便说一下,“可能的重复”问题中没有涵盖。)
分配的默认值是“或”运算符后的脚本名称这一事实只会增加我的困惑!:)
如何在函数声明中使用位置参数(从命令行给出)?
在函数定义中,$1 和 $2 是函数本身唯一的位置参数,而不是全局位置参数!
我想rsync删除几个用数组指定的文件,并删除目录中的任何其他文件。
我能想到的唯一方法是使用find, 并rsync覆盖文件删除其他文件,因此我们复制尽可能少的文件。
在以下示例中,我想删除 中的任何其他文件/tmp/tmp/,除了btrfs_x64.efi和iso9660_x64.efi。
$ refind_efi_dir='/tmp/tmp/'
$ drivers=('btrfs_x64.efi' 'iso9660_x64.efi')
$ find ${refind_efi_dir}drivers_x64/ "${drivers[@]/#/! -name }" -type f -exec rm -f {} +
Run Code Online (Sandbox Code Playgroud)
我希望扩展扩展为以下命令:
$ find /tmp/tmp/drivers_x64/ ! -name btrfs_x64.efi ! -name iso9660_x64.efi -type f -exec rm -f {} +
Run Code Online (Sandbox Code Playgroud)
但它似乎正在运行以下命令:
$ find /tmp/tmp/drivers_x64/ "! -name btrfs_x64.efi" "! -name iso9660_x64.efi" -type f -exec rm -f {} +
Run Code Online (Sandbox Code Playgroud)
有没有办法获得前者?理想情况下,如果某些数组条目中有空格,它也可以工作。
我有这个有效的代码:
get_parameter ()
{
echo "$query" | sed -n 's/^.*name=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"
}
Run Code Online (Sandbox Code Playgroud)
但我想用我传递给 get_parameter 的参数替换“名称”
get_parameter ()
{
echo "$query" | sed -n 's/^.*$1=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"
}
NAME=$( get_parameter name )
Run Code Online (Sandbox Code Playgroud)
然而,这不起作用。我哪里错了?
可能的重复:
如何将参数传递给别名?
正如可以减少保留彩色输出?我想用来git diff --color=always filename | less -r获取我的 git 差异的彩色输出。由于我经常使用它,因此为此设置一个别名会很好。但是如何filename在这个命令中包含?
我尝试了以下但没有成功:
alias gdiff='git diff --color=always $1 | less -r'
Run Code Online (Sandbox Code Playgroud)
键入gdiff example.php会显示example.phpwith的内容,less但会忽略 diff 部分。
有任何想法吗?
我想知道是否有办法为 X 数量的命令指定一个相互参数。例如
sudo cmd1 cmd2 cm3 \ --help
这显然不起作用,但我在手册中没有看到任何内容。我假设它无法完成,但并没有完全排除它。如果它不存在,我该如何制作它?