小编yll*_*ate的帖子

如何从文件名中提取特定元素?

我有一堆以下格式的文件:

2014-11-19.8.ext
2014-11-26.1.ext
2014-11-26.2.blah.ext
2014-11-26_3.ext
2014-11-26.4.stuff_here.ext
2014-12-03.1. could be anything.ext
2014-12-032b.ext
2014-11-26 613 adva.ext
Run Code Online (Sandbox Code Playgroud)

我的目标是遍历整个文件列表,并从中获取日期格式YYYY-MM-DD并将其存储在一个变量中以YYYYMMDD供进一步处理(在我的情况下它将被推送到touch命令中)。

所以通常我会匹配这个正则表达式: (\d{4})-(\d{2})-(\d{2}).*

然后用于$1$2$3获取我想要的模式,但是我不确定如何在bash/ 中执行此操作zsh

这如何在 shell 脚本中完成?

shell bash zsh shell-script

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

如何合并两个文件夹以便从一个文件夹中删除相同的文件,同时保留校验和差异?

我有一个场景,我从可能不同时间点的驱动器中进行恢复,该时间点不仅在存在的文件方面可能有所不同,而且还存在一些损坏,其中许多文件明显损坏。

我们将左侧文件夹命名为“A”,右侧文件夹命名为“B”。

我有责任合并这两个图像,这样:

  1. B 中存在但 A 中不存在的任何文件都应移动到 A,并且
  2. 两个位置中都存在且相同的任何文件都应从 B 中删除,最后
  3. 任何校验和不同的文件都应保留在 B 中,以便可以在 A 和 B 之间手动比较这些不同的文件,但除了这些具有不同校验和(即实际内容)的文件外,B 中不应保留任何其他内容。

注意:此时日期几乎无关紧要,尽管在元数据中保留较旧的日期会很好。

这怎么能干干净净地完成呢?不幸的是,我必须对数十 TB 的数据执行此操作,因此如果我不知道如何自动化此操作,这将是一个非常漫长的过程。看来 90-95% 的内容是相同的,因此应该制定一种“设置好然后忘记它”的方法,为进行手动比较做好准备。

shell bash zsh diff shell-script

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

如何“查找”所有具有 0** 权限的文件和文件夹?

我遇到了一个奇怪的情况,我发现了许多设置了 000 权限的文件和文件夹。这很容易通过以下方式修复:

sudo find . -perm 000 -type f -exec chmod 664 {} \; 
sudo find . -perm 000 -type d -exec chmod 775 {} \;
Run Code Online (Sandbox Code Playgroud)

不幸的是,我突然意识到问题有点复杂,有一些奇怪的权限,比如 044 和其他一些奇怪的设置。事实证明,这些都是散布和不可预测的。

有没有办法搜索诸如 0** 或其他此类非常有限的权限配置之类的权限?

osx shell permissions find

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

如何使用“rmlint”仅从一个位置删除重复项并保持其他位置不变?

我有两个地点/path/to/a/path/to/b. 我需要在两个路径中查找重复的文件并仅删除/path/to/b项目中的项目。 rmlint生成相当大的删除脚本,但它包含两个路径(甚至空文件夹)中要删除的条目。

我使用rmlint以下参数运行以获得此结果,我认为该结果只会/path/to/a被选择删除:

rmlint -g -e -S p /path/to/a /path/to/b
Run Code Online (Sandbox Code Playgroud)

shell deduplication rmlint duplicate-files

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

Fish shell:为什么 `file `which command`` 在 zsh 和 bash 中工作,但在 Fish 中不起作用?

在切换到 Fish shell 之前,我经常使用zshwith中的各种命令which some_command。一个例子可能是:

$ file `which zsh`
/opt/local/bin/zsh: Mach-O 64-bit executable arm64
/bin/zsh:           Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64
- Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e
- Mach-O 64-bit executable arm64e]
/bin/zsh (for architecture x86_64): Mach-O 64-bit executable x86_64
/bin/zsh (for architecture arm64e): Mach-O 64-bit executable arm64e
Run Code Online (Sandbox Code Playgroud)

当我尝试这样做时fish失败了:

$ which zsh
/opt/local/bin/zsh

$ file `which zsh`
`which: cannot open ``which' (No such file or directory)
zsh`: …
Run Code Online (Sandbox Code Playgroud)

fish command-substitution

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