我想要一个键盘快捷键这样工作:
> e foo.txt
Run Code Online (Sandbox Code Playgroud)
扩展为
> emacs foo.txt &
Run Code Online (Sandbox Code Playgroud)
使用起来很简单alias e=emacs,但如何&在文件名后插入?我意识到仅使用 可能无法实现alias,因此我将接受任何 bash 解决方案。如果需要 shell 脚本,请解释它是如何工作的。
在对一些模拟数据进行后处理的较大脚本中,我有以下行:
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 版本。
当我rsync或scp来自特定服务器时,我收到一条相当长的消息,告诉我服务器的规则。但是,当我设置定期拉取时,我希望能够在我的日志中抑制这些消息。查看手册页表明-q应该可以工作,但这只会使来自 scp 本身的消息安静下来。我怎样才能做到这一点?
如果我有包含文件的目录
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.. 这可能吗?
这看起来类似于问题
但建议的答案,“它对我来说是开箱即用的”,却没有。我也试过TAB TAB,没有效果。命令``bash --version givesGNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu)`。
我知道pwd给出当前工作目录,hostname给出当前主机并whoami给出当前用户。是否有一个unix命令可以给我输出
whoami@hostname:pwd
Run Code Online (Sandbox Code Playgroud)
以便我可以快速将输出粘贴到scp命令中?
我有两个排序的文件A,B其中的大小A远大于B,例如 A 是 100GB 而 B 是 50MB。我想很快确定是否有任何行B中包含的A,一旦匹配时停止。我目前有一个用于此的 python 脚本,但是当该过程必须针对不同的B's重复数千次时,它运行缓慢。
令我立即懊恼的是,从文件中删除写权限似乎并不能保护它免受rm -f:
touch foo
chmod a-w foo
rm -f foo
Run Code Online (Sandbox Code Playgroud)
当rm将使用-f标志调用时,如何保护文件不被意外删除?它看起来chattr +i foo可行,但它需要在我的系统上拥有 root 权限(这是有意的吗?),所以我正在寻找非 root 解决方案。
我的印象是 tar 不压缩文件。想象一下,当我压缩一百万个小文件(du -h~4.2G)并且生成的 tar 是它的四分之一(ls -lh mytar.tar~1.3G)时,我会感到惊讶!
显然,这些小文件占用的空间超出了它们报告的大小,另一个问题的答案表明,每个非空文件无论大小如何都至少占用1KB。但是这 1KB 是从哪里来的,它在不同的文件系统(这是 ext4)中是否有所不同,并且 1.01 KB 的文件会占用 2KB 吗?
简而言之,我如何衡量真实的文件大小,尤其是目录中的许多文件?我试过了du --apparent-size -h,我只得到 437M,所以我对这三个截然不同的数字感到很困惑。
我知道.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 的参数传递?
我理解第一个例子:
> 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) 我正在尝试对*.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 命令的结果一样?
bash ×2
permissions ×2
alias ×1
aspell ×1
autocomplete ×1
directory ×1
disk-usage ×1
emacs ×1
files ×1
filesystems ×1
find ×1
gnu-parallel ×1
hostname ×1
pwd ×1
rm ×1
rsync ×1
scp ×1
search ×1
shell ×1
sort ×1
stdin ×1
tar ×1
whoami ×1
wildcards ×1