标签: bash

查找命令执行选项

我正在尝试使用find exec 的+选项而不是 xargs。但是,我似乎无法让它发挥作用。我觉得我一定在这里遗漏了一些明显的东西。

例子:

find . -name "*.java" -exec grep "@author" {} + \;
find: paths must precede expression
Usage: find [-H] [-L] [-P] [path...] [expression]
Run Code Online (Sandbox Code Playgroud)

另一方面,这有效:

find . -name "*.java" -exec grep "@author" {}  \;
Run Code Online (Sandbox Code Playgroud)

就像这样:

find . -name "*.java" | xargs  grep "@author"
Run Code Online (Sandbox Code Playgroud)

unix bash command-line find

3
推荐指数
1
解决办法
1380
查看次数

如何从命令行注销 gdm?

如何从本地终端注销最新版本的 Ubuntu?

bash ubuntu

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

为什么有时我会在 shell 上看到奇怪的退格行为?

我使用 bash shell,有时突然,我的Backspace钥匙停止工作(当这种情况发生时Ctrl+Backspace仍然工作正常)

我不确定为什么会发生这种情况,但它也会延续到我从 shell 使用的任何 vim 会话。令我惊讶的是,获得一个新的外壳并没有帮助,而且问题似乎像开始时一样突然消失。

这就是键入的字符的样子,每次按键都会在外壳Backspace上显示为^?

$ cat filem^?namr^?e
Run Code Online (Sandbox Code Playgroud)

有人知道可能会发生什么吗?我怎样才能恢复正常行为?

linux unix bash shell backspace

3
推荐指数
1
解决办法
6311
查看次数

.bashrc 被编辑后的别名?

我想添加一个别名(为了方便起见),它允许我编辑我的 bashrc,如果进行了更改,请提供它,但如果没有进行任何更改,请不要提供(以防我改变主意)。

我最初尝试过,alias vb='vi ~/.bashrc && source ~/.bashrc'但后来我意识到即使只是退出 vi:q或者:q!可能仍然返回成功返回值,这就是它仍然来源的原因。

是否有某种方法可以创建别名,以便在不更改文件的情况下退出 vi 不会产生 .bashrc 来源,但如果某些内容发生了变化,它确实如此?

linux bash vim bashrc bash-alias

3
推荐指数
1
解决办法
427
查看次数

“是”命令用于什么?

在我的 Linux 4.15 机器上,我发现这个yes命令看起来完全没用——它输出一个作为参数传递的字符串(默认'y':),直到被杀死。而且……就是这样。

name@machine:~$ yes
y
y
[...]
y
y
^C
Run Code Online (Sandbox Code Playgroud)

我很难找出可能的用例,特别是考虑到 simplewhile true; do echo y; done具有类似的行为并且更具可读性(但我也找不到任何用例)。

这个命令可以用来做什么?它来自哪里?手册页和完整文档都没有回答这些问题!

linux bash shell command-line

3
推荐指数
1
解决办法
240
查看次数

“回声 $0”是如何工作的?

我在Ask Ubuntu上发现我可以使用这个命令来找出我所在的 shell。

echo $0
Run Code Online (Sandbox Code Playgroud)

我喜欢这个,因为与Unix 和 Linux Stack Exchange上的更复杂的解决方案相比,它很简单。

我想echo类似于打印,但什么是$0

最终,我希望能够以编程方式打开多个选项卡,类似于在Stack Overlow上看到的。

那使用gnome-terminal但我正在使用 Bash。

linux unix bash macos

3
推荐指数
1
解决办法
7326
查看次数

ZSH:带前缀的glob

是否可以在 shell glob 扩展中添加“前缀”?我的用例如下,我有一个程序需要重复选项标志以将多个文件作为输入传递:

$ ls
foo.txt bar.txt baz.txt
$ ./some-script.sh -a foo.txt -a bar.txt -a baz.txt 
Run Code Online (Sandbox Code Playgroud)

我希望能够使用某种扩展来添加'-a '*txt. 那可能吗?用 zsh?砸?

bash zsh globbing

3
推荐指数
1
解决办法
558
查看次数

在没有“./”前缀的文件名上使用 find 和 do 命令

cp对多个子目录中的文件名执行 a并foo-为其添加前缀会导致错误:

$ find my-dir -path "*/*" -execdir sh -c 'cp {} foo-{}' \;
cannot create regular file ‘foo-./blabla.jpg’: No such file or directory
Run Code Online (Sandbox Code Playgroud)

在 macOS 上,我没有得到这个./前缀,而且命令工作正常。

有没有办法cp不带./前缀的文件名?

linux bash command-line find string-manipulation

3
推荐指数
1
解决办法
648
查看次数

if 命令中的测试条件

知道为什么echo在这两种情况下都执行语句吗?

输出it worked

#!/bin/bash

rizwan=''
if [ -n $rizwan ]; then
  echo "it worked"
fi
Run Code Online (Sandbox Code Playgroud)

替换-n-z, 并it worked在不期望输出时输出:

#!/bin/bash

rizwan=''
if [ -z $rizwan ]; then
  echo "it worked"
fi
Run Code Online (Sandbox Code Playgroud)

linux bash bash-scripting

3
推荐指数
1
解决办法
340
查看次数

如何根据文件名将多个文件解压到多个子目录中

我有一个包含大约 1900 万个文件的 tar 文件(没有文件夹)

0000107b869682826003b04a40e6394.txt
00029237482s8923789423ud8923892.txt
2c002y8378723887292377a79237649.txt
f598238209237408238742308374038.txt
Run Code Online (Sandbox Code Playgroud)

我如何解压所有文件,使它们出现在以文件的前四个字符命名的子目录中。因此,对于上面的例子中,它会创建00002c02以及f599目录和每个将具有以下文件。

0000\0000107b869682826003b04a40e6394.txt
0002\00029237482s8923789423ud8923892.txt
2c02\2c002y8378723887292377a79237649.txt
f598\f598238209237408238742308374038.txt
Run Code Online (Sandbox Code Playgroud)

我已经尝试创建一个脚本来遍历 tar 文件中的文件,创建一个目录并从 tar 中提取该文件并将其放入目录中。这适用于少量文件,但是当 tar 有数百万个时,提取需要很长时间。

linux bash command-line tar

3
推荐指数
1
解决办法
170
查看次数