标签: bash

如何使用 Linux shell 用空格重命名文件?

我用空格命名了一些文件,我想用_. 但是,每次我在 shell 中使用文件名(例如Spring 2011)编写命令时,shell 都无法识别该文件或目录。

我该怎么办?有什么办法可以将 unicode 字符用于空格吗?

linux bash shell

36
推荐指数
4
解决办法
10万
查看次数

撤消tar文件提取混乱

我刚刚解压了一个档案,该档案在我的整洁目录中产生了一堆文件。例如:

user@comp:~/tidy$ tar xvf myarchive.tar
file1
file2
dir1/
dir1/file1
dir1/subdir1/
dir1/subdir1/file1
dir2/
dir2/file1
...
Run Code Online (Sandbox Code Playgroud)

我原以为 tar 文件会被组织在一个文件夹中(即myarchive/),但事实并非如此!现在我有大约 190 个文件和目录,它们在一个有组织的目录中进行了数字化。这些解压缩的文件需要清理。

有什么方法可以“撤消”并删除从此存档中提取的文件和目录?


感谢下面的精彩回答。总之,这里有两个步骤(1)删除文件,(2)以反向打包顺序删除空目录结构(首先删除外部目录):

tar tf myarchive.tar | xargs -d'\n' rm
tar tf myarchive.tar | tac | xargs -d'\n' rmdir
Run Code Online (Sandbox Code Playgroud)

更安全的是,通过echoxargs.

linux bash undo tar

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

抑制 echo 命令的执行跟踪?

我正在运行 Jenkins 的 shell 脚本,它使用 shebang options 启动 shell 脚本#!/bin/sh -ex

根据Bash Shebang 的假人?, -x, “导致 shell 打印执行跟踪”,这对于大多数用途都非常有用——除了回声:

echo "Message"
Run Code Online (Sandbox Code Playgroud)

产生输出

+ echo "Message"
Message
Run Code Online (Sandbox Code Playgroud)

这有点多余,看起来有点奇怪。有没有办法保持-x启用,但只输出

Message
Run Code Online (Sandbox Code Playgroud)

而不是上面的两行,例如通过在 echo 命令前加上一个特殊的命令字符,或者重定向输出?

bash shell command-line bash-scripting jenkins

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

Putty SSH:CTRL+Cursor 键不起作用跳到上一个/下一个单词

当我通过 SSH 使用腻子(从我的 Windows 7 盒子)连接到我的本地 Ubuntu 开发服务器时,以下组合键无法在单词边界上向前和向后移动光标:

  • Ctrl+Left Arrow在光标板上
  • Ctrl+Right Arrow在光标板上

光标一次只能移动一个字符。我正在使用 bash。

bash shell putty inputrc ubuntu

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

获取文件的父目录

我只想获取文件的父目录的名称。

示例:当我有 时path=/a/b/c/d/file,我只想要d而不想要/a/b/c/d(我从 中获得dirname $path)作为输出。

有没有什么复杂的方法可以做到这一点?

linux bash shell

35
推荐指数
2
解决办法
6万
查看次数

如何在 if/else 语句中将变量与文本字符串而不是整数进行比较?

在编写 shell 脚本的过程中,我遇到了以下 if/else 语句的问题,该语句位于脚本中间的某个位置:

if [ $act -eq "add" ]
then
    read - "add or update: " $comm
    git commit -m "$comm $file"
else
    git commit -m "$act $file"
fi
Run Code Online (Sandbox Code Playgroud)

返回的错误是:

./gitup: line 13: [: add: integer expression expected
Run Code Online (Sandbox Code Playgroud)

然后继续执行脚本的其余部分。如何让 if 段评估/比较变量与字符串输入而不是整数;在我尝试的其他一些事情中使用“!=”时需要一个不同的错误。

bash shell-script bash-scripting

35
推荐指数
2
解决办法
11万
查看次数

意外来源的 .bash_history

一瞬间的光彩,我执行了命令source ~/.bash_history。幸运的是,大多数命令都是vim用来编辑一些文件的,但我的历史中有一些可怕的命令——移动和删除具有相对路径的文件。

幸运的是现在它卡在一个vim会话中,但是如果我暂停或退出它,它会进入下一个。历史文件有 1000 行。

除了重新启动机器之外,如何取消此命令?

bash

35
推荐指数
2
解决办法
3406
查看次数

bash 的 !$ 和 !! 等价物是什么?在鱼壳里?

我已经使用 bash 十多年了,并且已经习惯于能够输入 !$ 来重复最后一个参数,例如:

$ mkdir foo
$ cd !$
cd foo
Run Code Online (Sandbox Code Playgroud)

(最后一行是由 shell 打印出来的,告诉你你的命令的计算结果)。同样,我经常对以下内容:

$ make_sandwich
-bash: make_sandwich: Permission denied
$ sudo !!
sudo make_sandwich
Run Code Online (Sandbox Code Playgroud)

我真的很喜欢鱼壳,但我的肌肉记忆已经很成熟了。鱼有等价物吗?我可以配置 fish 以使用相同的命令吗?

bash shell command-line fish

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

一种更舒适的编辑长 $PATH 的方法?

我想在 ~/.bashrc 中添加几个目录到我的 $PATH。

我的 $PATH 很长,所以很难看出它包含哪些目录以及以什么顺序。

我知道我可以修改我的 ~/.bashrc 为:

PATH=$PATH:/some/dir
PATH=$PATH:/another/dir:/yet/another
PATH=$PATH:/and/another
...
Run Code Online (Sandbox Code Playgroud)

它会让它更容易阅读。但我想知道在过去的几年里,Bash 是否已经获得了一些使指定长 PATH 更容易的语法。例如,我在幻想类似于以下的语法:

PATH=:((
  /some/dir
  /another/dir
  /yet/another
  /and/another
  ...
))
Run Code Online (Sandbox Code Playgroud)

知道这样的语法是无效的。我想知道是否有这么简单的事情。在那儿?

linux unix bash path

35
推荐指数
3
解决办法
2842
查看次数

内置命令在 bash 中有什么作用?

我知道什么是内置命令,但它builtin本身有什么作用?执行which ls显示了我/bin/ls,但执行不which builtin返回任何内容。

man builtin只是给了我一个内置命令列表,其中一个是builtin. 手册页的其余部分解释了内置是什么,而不是什么builtin是。

builtin --help告诉我,builtin: usage: builtin [shell-builtin [arg ...]]但仍然不是它的作用。

它是否以其他内置命令不是的方式成为 bash 的一部分?

bash

35
推荐指数
1
解决办法
1997
查看次数

标签 统计

bash ×10

shell ×5

linux ×4

bash-scripting ×2

command-line ×2

fish ×1

inputrc ×1

jenkins ×1

path ×1

putty ×1

shell-script ×1

tar ×1

ubuntu ×1

undo ×1

unix ×1