相关疑难解决方法(0)

如何在 Bash 中使用空字节?

我读过,因为 Bash 中的文件路径可以包含除空字节(零值字节$'\0')之外的任何字符,所以最好使用空字节作为分隔符。例如,如果将 的输出find发送到另一个程序,则建议使用该-print0选项(对于find具有它的版本)。

但是,虽然这样的事情工作正常(打印由换行符分隔的文件路径 - 别担心,这只是一个演示,我实际上并没有在实际脚本中这样做):

find -print0 \
  | while IFS= read -r -d $'\0' ; do echo "$REPLY" ; done
Run Code Online (Sandbox Code Playgroud)

这样的事情就不会工作:

for file in * ; do echo -n "$file"$'\0' ; done \
  | while IFS= read -r -d $'\0' ; do echo "$REPLY" ; done
Run Code Online (Sandbox Code Playgroud)

当我只尝试for-loop 部分时,我发现它只是将所有文件名打印在一起,中间没有空字节。

为什么是这样?这是怎么回事?

bash null

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

在 Linux 中命名文件名时使用某些特殊字符是否正确?

它是正确使用某些特殊字符,如+&'.。(点)和,(逗号),基本上,在文件名中。

我知道您可以使用-并且_没有问题,但是在进行一些研究时,我无法找到有关其他符号的确切信息;有人说你可以,有人说你不能,还有一些人说“不鼓励”使用它们(无论这意味着什么)。

filenames unix-philosophy

22
推荐指数
4
解决办法
2万
查看次数

Bash 复制所有与给定扩展名不匹配的文件

当我从 Shotwell 中的相机导入图片时,它也会导入视频剪辑。这有点烦人,因为我想将我的视频存储在另一个文件夹中。我尝试编写一个 bash 命令来执行此操作,但没有成功。

我需要一个满足以下要求的命令:

  • 找到目录结构中没有 .jpg、.png、.gif 或 .xcf(不区分大小写)扩展名的所有文件。
  • 将所有这些文件移动到目标目录中,无论文件名或目录路径是否包含空格或特殊字符。

任何帮助,将不胜感激!

编辑:我在 Ubuntu 中使用默认 shell,这意味着某些命令是别名等。

编辑 2:我自己尝试过(不是复制部分,只是文件列表部分)。我打开 extglob 并运行以下命令:

$ ls -R /path | awk '
  /:$/&&f{s=$0;f=0}
  /:$/&&!f{sub(/:$/,"");s=$0;f=1;next}
  NF&&f{ print s"/"$0 }'
Run Code Online (Sandbox Code Playgroud)

这列出了一切。我尝试在它的末尾使用 grep,但对于如何让它不匹配我给它的模式没有最模糊的想法。extglob 开关对 grep 没有太大帮助,即使它对其他命令有帮助。

bash file-copy wildcards

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

标签 统计

bash ×2

file-copy ×1

filenames ×1

null ×1

unix-philosophy ×1

wildcards ×1