小编Har*_*arv的帖子

Grep:如何添加“或”条件?

如何将条件 OR 引入 grep?例如,为(JPEG 或 JPG)搜索文件类型,然后仅将这些文件发送到照片文件夹中。例如。我知道如何将文件发送到我想要的位置,并获取文件类型,我只需要 grep 部分的一些帮助。

我在 OS X 上,IMO 似乎已经修改/定制了 *nix 实用程序,而不是我在 *nix 环境中习惯的。所以希望答案可以尽可能通用/便携。

grep

55
推荐指数
5
解决办法
10万
查看次数

用奇数字符重命名文件夹

我的 Mac 上有一个名为“????HFS+ 私人数据”的文件夹。我正在尝试删除它,但它包含一堆奇怪的字符,这些字符使 unlink、rm 和 mv 窒息,因此很难删除它及其内容。我已经尝试编写一些代码来直接调用 unlink() 以防万一 unlink/rm/mv 二进制文件正在做一些其他的事情 - 但不, unlink() 无法解析这个字符。

我用 echo 和 od 找出这是什么字符:

************@Trinity:~/Desktop/test$ echo -e "?" | od -t oC -An
      342 220 200 012`
Run Code Online (Sandbox Code Playgroud)

我在这里查找了 342:http : //ascii-code.com - 发现它是 Latin-1 集的一部分。我尝试 iconv 将其转换为 UTF-8:

************@Trinity:~/Desktop/test$ iconv -f latin1 -t utf-8 "????HFS+ Private Data"
iconv: ????HFS+ Private Data: I/O error
Run Code Online (Sandbox Code Playgroud)

那么如何删除这个文件夹呢?我可以将十六进制/八进制代码传递给 rm 或 mv 之类的吗?我已经尝试了我能想到的所有方法,包括 rm *、调用 sudo 等。问题是取消链接对该角色的阻塞,所以我需要以某种方式更改该角色。我还考虑在 VM 中安装 Debian 并授予它访问此文件夹的权限,以便我可以从那里尝试,以防这是我在 OS X 环境中使用的工具的问题。

编辑:我试过这个:

************@Trinity:~/Desktop/test$ echo …
Run Code Online (Sandbox Code Playgroud)

osx character-encoding special-characters rm mv

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

find、xargs 和 mv:使用双引号重命名文件、扩展和 bash 优先级问题

好的,我只是想去掉文件名中的双引号。这是我想出的命令(bash)。

$ find . -iname "*\"*" -print0 | xargs -0 -I {} mv {} {} | tr -d \"
Run Code Online (Sandbox Code Playgroud)

问题是'mv {} {} | tr -d \"'部分。我认为这是一个优先级问题:bash 似乎被解释为(mv {} {}) | tr -d \"),而我剩下的是两个文件名都去掉了双引号。显然,这不是我想要的,因为它无法重命名文件。相反,我希望第一个文件名有引号,第二个没有,更像这样:mv {} ({} | tr -d \").

我该如何实现?我试过方括号和花括号,但在明确设置命令执行优先级时,我不太确定我在做什么。

bash find xargs shell-script

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

将输出重定向到 stdout 并通过管道传输到二进制文件

我的 .bash_profile 中有一个很好的 PS1 行,我想将它复制到另一台机器上。所以我想查看它并将它复制到我的剪贴板。我不知道如何将命令串在一起来执行此操作。

我想我需要做的是为我的 PS1 线做 grep,将它通过管道传输到 tee,然后 tee 转到 stdout 和 pbcopy(将线复制到剪贴板的二进制文件)。

到目前为止,我有:

grep PS1 .bash_profile | tee [what do I put here?] | pbcopy
Run Code Online (Sandbox Code Playgroud)

不幸的是,我只是让自己感到困惑,无法弄清楚如何做到这一点。如何同时输出到标准输出和二进制文件?

command-line pipe io-redirection tee

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

我不太了解 shell 上的扩展和引用(zsh/bash)

我在这里阅读了一些关于在 shell 上引用变量的答案。基本上,这就是我正在运行的内容:

for f in "$(tmsu files)"; do echo "${f}"; done

这有预期的结果:文件列表。但是,我很确定它们是作为单个字符串出现的。经过一些阅读,我意识到这是一个 zsh-ism;它处理分裂的方式与大多数贝壳不同。

所以我启动bash并运行相同的命令。我原以为它会拆分列表,但唉,我得到了完全相同的结果。所以现在我真的很困惑。

  1. 为什么 bash 的行为不像预期的那样?
  2. 如何让 zsh 分割线?

我试过 (zsh): for f in "$(tmsu files)"; do echo "${=f}"; done 以及 for f in "$(=tmsu files)"; do echo "${f}"; done 都没有奏效,所以显然我误解了如何zsh拆分。

更糟糕的是,在某些时候,我完全按照自己的意愿去做了,但我不记得我是怎么做到的。

bash zsh split for

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

管道到带有标志的命令

我知道这之前肯定有人问过,我不确定要搜索什么,所以请原谅重复的问题。

当从前一个命令输入时,如何将变量“拉入”到正确的位置?我试图找到一个 PID,然后找到与该 PID 相关的打开文件,然后将其缩小到一个文件,然后对该文件执行命令。这是命令:

ps x | grep IINA | grep -v grep | awk '{print $1}'

好的,这给了我一个 PID,太好了。现在我想要lsof -p那个 PID,但我不能简单地做ps x | grep IINA | grep -v grep | awk '{print $1}' | lsof -p.

不做ps x | grep IINA | grep -v grep | lsof -p 'awk '{print $1}''(再次,请原谅不正确的反引号),我怎么能做我想做的事?

linux shell bash io-redirection

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

zsh 中的 some_variable 与 some-variable

为什么看似zsh明白要做什么some_variable=1 command,却又不明白some-variable=1 command?例如:$ fs_screen=1 mpv --fs-screen=${fs_screen} someFile.mp4工作正常,但$ fs-screen=1 mpv --fs-screen=${fs-screen} someFile.mp4结果是zsh: command not found: fs-screen=1

\n

我深入研究了 zsh 文档,发现了我认为的问题所在。摘自https://zsh.sourceforge.io/Doc/Release/Shell-Grammar.html#Precommand-Modifiers

\n
A simple command may be preceded by a precommand modifier, which will alter how the command is interpreted. These modifiers are shell builtin commands with the exception of nocorrect which is a reserved word.\n\n-\nThe command is executed with a \xe2\x80\x98-\xe2\x80\x99 prepended to its argv[0] string.\n
Run Code Online (Sandbox Code Playgroud)\n

但是,我在任何地方都找不到有关此内容的更多信息。它的目的是什么,是否可以禁用它,以便我可以使用 …

zsh environment-variables shell-builtin variable

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