小编Hoo*_*ked的帖子

别名在后台运行的命令

我想要一个键盘快捷键这样工作:

> e foo.txt
Run Code Online (Sandbox Code Playgroud)

扩展为

> emacs foo.txt &
Run Code Online (Sandbox Code Playgroud)

使用起来很简单alias e=emacs,但如何&在文件名后插入?我意识到仅使用 可能无法实现alias,因此我将接受任何 bash 解决方案。如果需要 shell 脚本,请解释它是如何工作的。

bash alias

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

为什么(GNU?)并行失败,我该如何解决?

在对一些模拟数据进行后处理的较大脚本中,我有以下行:

parallel bnzip2 -- *.bz2
Run Code Online (Sandbox Code Playgroud)

其中,如果我理解parallel正确(我可能没有理解),应该在具有列出的扩展名的所有文件上运行程序的 n 核线程。您可能会注意到我拼错了命令bunzip2。我希望这里有警告或错误消息,但它无声无息地失败了。这是故意的吗?以后我怎么不被这件事咬到?

更新:

parallel安装的可能与我认为的不同:

> parallel --version`


parallel: invalid option -- '-'
parallel [OPTIONS] command -- arguments
    for each argument, run command with argument, in parallel
parallel [OPTIONS] -- commands
    run specified commands in parallel
Run Code Online (Sandbox Code Playgroud)

parallel我系统上的手册页提供:

 parallel(1)                                                        parallel(1)
NAME
       parallel - run programs in parallel
....
AUTHOR
   Tollef Fog Heen
Run Code Online (Sandbox Code Playgroud)

这似乎不是GNU 版本。

gnu-parallel moreutils-parallel

15
推荐指数
2
解决办法
6196
查看次数

在 rsync 中抑制服务器消息

当我rsyncscp来自特定服务器时,我收到一条相当长的消息,告诉我服务器的规则。但是,当我设置定期拉取时,我希望能够在我的日志中抑制这些消息。查看手册页表明-q应该可以工作,但这只会使来自 scp 本身的消息安静下来。我怎样才能做到这一点?

scp rsync error-handling

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

如何让 bash 自动完成通配符?

如果我有包含文件的目录

foo.bar.a.cat
foo.bar.a.hat
Run Code Online (Sandbox Code Playgroud)

然后我输入ls f+ TABbash shell 自动完成到ls foo.bar.a.. 如果我输入ls *bar*+TAB我希望它自动完成到*bar*.a.. 这可能吗?

这看起来类似于问题

如何在bash中启用通配符的制表符补全?

但建议的答案,“它对我来说是开箱即用的”,却没有。我也试过TAB TAB,没有效果。命令``bash --version givesGNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu)`。

bash autocomplete wildcards

13
推荐指数
3
解决办法
5110
查看次数

给出 username@hostname:pwd 的命令

我知道pwd给出当前工作目录,hostname给出当前主机并whoami给出当前用户。是否有一个unix命令可以给我输出

whoami@hostname:pwd
Run Code Online (Sandbox Code Playgroud)

以便我可以快速将输出粘贴到scp命令中?

shell hostname shell-builtin pwd whoami

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

确定两个排序列表是否包含唯一元素的最快方法

我有两个排序的文件AB其中的大小A远大于B,例如 A 是 100GB 而 B 是 50MB。我想很快确定是否有任何行B中包含的A,一旦匹配时停止。我目前有一个用于此的 python 脚本,但是当该过程必须针对不同的B's重复数千次时,它运行缓慢。

search text-processing sort

6
推荐指数
1
解决办法
536
查看次数

保护文件免受`rm -f`

令我立即懊恼的是,从文件中删除写权限似乎并不能保护它免受rm -f

touch foo
chmod a-w foo
rm -f foo
Run Code Online (Sandbox Code Playgroud)

rm将使用-f标志调用时,如何保护文件不被意外删除?它看起来chattr +i foo可行,但它需要在我的系统上拥有 root 权限(这是有意的吗?),所以我正在寻找非 root 解决方案。

permissions rm

6
推荐指数
1
解决办法
3488
查看次数

我的小文件到底占用了多少空间?

我的印象是 tar 不压缩文件。想象一下,当我压缩一百万个小文件(du -h~4.2G)并且生成的 tar 是它的四分之一(ls -lh mytar.tar~1.3G)时,我会感到惊讶!

显然,这些小文件占用的空间超出了它们报告的大小,另一个问题答案表明,每个非空文件无论大小如何都至少占用1KB。但是这 1KB 是从哪里来的,它在不同的文件系统(这是 ext4)中是否有所不同,并且 1.01 KB 的文件会占用 2KB 吗?

简而言之,我如何衡量真实的文件大小,尤其是目录中的许多文件?我试过了du --apparent-size -h,我只得到 437M,所以我对这三个截然不同的数字感到很困惑。

filesystems tar disk-usage files

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

从命令行参数截断 emacs 中的长行

我知道.emacs长行截断中的命令是:

(setq-default truncate-lines t)
Run Code Online (Sandbox Code Playgroud)

或击键:

M-x <RET> toggle-truncate-lines <RET>
Run Code Online (Sandbox Code Playgroud)

但是如何将这些作为从 shell 启动 emacs 的参数传递?

emacs

4
推荐指数
1
解决办法
607
查看次数

为什么我可以将文件追加到没有写权限的目录中?

我理解第一个例子:

> mkdir foo
> chmod u-w foo
> touch foo/test
touch: cannot touch `foo/test': Permission denied
> echo "BAD" >> foo/test
bash: foo/test: Permission denied
Run Code Online (Sandbox Code Playgroud)

这是有道理的:我没有该目录的写入权限,因此我不应该能够写入任何更改。我无法触摸或创建可以附加的文件。然而为什么这会起作用呢?

> mkdir bar
> touch bar/test
> chmod u-w bar
> echo "BAD" >> bar/test 
> cat bar/test 
BAD
Run Code Online (Sandbox Code Playgroud)

permissions directory

4
推荐指数
1
解决办法
3264
查看次数

一起使用 find 和 aspell

我正在尝试对*.md当前目录中的所有文件进行拼写检查,但以下命令失败:

>> find . -maxdepth 1 -name "*.md" | xargs -I {} aspell check {}
xargs: aspell: exited with status 255; aborting
Run Code Online (Sandbox Code Playgroud)

我假设这是因为aspell需要stdin与用户交互并且以某种方式xargs不提供它。我在 Twitter 上发现了一个黑客

find . -maxdepth 1 -name "*.md" | xargs -n 1 xterm -e aspell check
Run Code Online (Sandbox Code Playgroud)

但这每次都会打开一个新的 xterm。如何让我的原始命令工作,就像我要单独运行aspell我的 find 命令的结果一样?

find aspell stdin

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