小编nne*_*neo的帖子

相对于目录的“查找”输出

我想使用find递归列出给定根目录中的所有文件和目录以进行cpio操作。但是,我不希望根目录本身出现在路径中。例如,我目前得到:

$ find diskimg
diskimg
diskimg/file1
diskimg/dir1
diskimg/dir1/file2
Run Code Online (Sandbox Code Playgroud)

但是,我想得到

file1
dir1
dir1/file2
Run Code Online (Sandbox Code Playgroud)

(注意根也不在我想要的输出中,但这很容易摆脱tail)。

我在 OS X 上,如果可能的话,我不想安装任何额外的工具(例如 GNU find),因为我想与其他 OS X 用户共享我正在编写的脚本。

我知道这可以通过cut切断根目录来完成,但这似乎是一个次优的解决方案。有更好的解决方案吗?

find

41
推荐指数
4
解决办法
5万
查看次数

GNU find 中的“启用的功能”是什么意思?

当我find --version与 GNU find 一起使用时,我得到如下信息:

find (GNU findutils) 4.5.9     
[license text]
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS(FTS_CWDFD) CBO(level=2)
Run Code Online (Sandbox Code Playgroud)

这些“特征”是什么意思?在 中有一些关于O_NOFOLLOW作为安全措施的参考man find,并且提到了LEAF_OPTIMISATION一种优化,可以节省lstat对叶节点的一些调用。但我找不到任何关于FTS,D_TYPE或 的信息CBO

find gnu

8
推荐指数
2
解决办法
476
查看次数

rsync'ing 多个 {src,dest} 对

我有一个正在部署代码的远程服务器。我目前正在使用scp上传代码,但scp速度很慢,我想切换到rsync(或其他更有效的东西)。瓶颈在于建立ssh连接,所以我想尽量减少与服务器建立的连接数。

在本地,我的构建过程输出一个out包含binlibetc子目录的目录。我将输出文件的子集推送到远程服务器上的匹配位置。

我的scp命令如下所示:

scp out/bin/$BINFILES remote:/usr/bin
scp out/lib/$LIBFILES remote:/usr/lib
scp out/etc/$ETCFILES remote:/etc
Run Code Online (Sandbox Code Playgroud)

这会与远程服务器建立三个连接,并完整复制文件,即使它们没有被修改。这就是我所做的rsync

rsync -e ssh -avz out/bin/$BINFILES remote:/usr/bin
rsync -e ssh -avz out/lib/$LIBFILES remote:/usr/lib
rsync -e ssh -avz out/etc/$ETCFILES remote:/etc
Run Code Online (Sandbox Code Playgroud)

这更快(压缩和消除重复),但仍然与远程服务器建立三个连接。

有没有办法使用单个rsync命令实现这三个副本?我愿意在复制之前将所有 {src,dest} 对放在一个临时文件中,如果这样做的话。

我也愿意尝试不同的工具,但它应该可用于 OS X(我当前的开发平台),并且它应该最好支持传输优化rsync

ssh rsync

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

为什么 ls 按长度对中文文件名排序?

我遇到了一些奇怪的行为,我无法完全理解ls中文文件名。我正在运行 macOS 13.6.1,启用了 SIP(​​无核心操作系统修改),安装了 MacPorts,并将美国英语作为主要语言。

\n

首先,在空白文件夹中运行这个小脚本来创建一些测试文件:

\n
import random\n\nrandom.seed(42)\n\nfor i in range(30):\n    n = random.randrange(3, 8)\n    fn = "".join(random.choice("\xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89") for _ in range(n))\n    open(fn, "w")\n
Run Code Online (Sandbox Code Playgroud)\n

这使得 30 个文件以字符 \xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89(一、二、三)的随机组合命名。

\n

接下来,我ls -l在我的 Mac 上运行(根据手册页,版本为“macOS 13.5”):

\n
% ls -l\ntotal 8\n-rw-r--r--@ 1 brx  staff  164 Nov 25 02:41 test.py\n-rw-r--r--+ 1 brx  staff    0 Nov 25 02:41 \xe4\xb8\x80\xe4\xb8\x80\xe4\xb8\x89\n-rw-r--r--+ 1 brx  staff    0 Nov 25 02:41 \xe4\xb8\x80\xe4\xb8\x89\xe4\xba\x8c\n-rw-r--r--+ 1 brx  staff    0 Nov 25 02:41 \xe4\xb8\x89\xe4\xb8\x89\xe4\xb8\x80\n-rw-r--r--+ 1 brx …
Run Code Online (Sandbox Code Playgroud)

ls sort unicode locale macos

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

即使以root身份也无法列出目录?

我在 Mac (macOS 10.14.3) 上遇到了一个奇怪的问题。我跑去sudo du -xk /获取有关磁盘使用情况的详细数据,但遇到了几个错误:

du: /Users/brx/Library/Application Support/MobileSync: Operation not permitted
du: /Users/brx/Library/Application Support/CallHistoryTransactions: Operation not permitted
du: /Users/brx/Library/Application Support/com.apple.TCC: Operation not permitted
du: /Users/brx/Library/Application Support/CallHistoryDB: Operation not permitted
du: /Users/brx/Library/IdentityServices: Operation not permitted
du: /Users/brx/Library/Messages: Operation not permitted
du: /Users/brx/Library/HomeKit: Operation not permitted
du: /Users/brx/Library/Mail: Operation not permitted
du: /Users/brx/Library/Safari: Operation not permitted
du: /Users/brx/Library/Suggestions: Operation not permitted
du: /Users/brx/Library/Containers/com.apple.VoiceMemos: Operation not permitted
du: /Users/brx/Library/Containers/com.apple.Home: Operation not permitted
du: /Users/brx/Library/Containers/com.apple.Safari: Operation not permitted
du: …
Run Code Online (Sandbox Code Playgroud)

osx permissions

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

标签 统计

find ×2

gnu ×1

locale ×1

ls ×1

macos ×1

osx ×1

permissions ×1

rsync ×1

sort ×1

ssh ×1

unicode ×1