我想使用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 --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
。
我有一个正在部署代码的远程服务器。我目前正在使用scp
上传代码,但scp
速度很慢,我想切换到rsync
(或其他更有效的东西)。瓶颈在于建立ssh
连接,所以我想尽量减少与服务器建立的连接数。
在本地,我的构建过程输出一个out
包含bin
、lib
和etc
子目录的目录。我将输出文件的子集推送到远程服务器上的匹配位置。
我的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
。
我遇到了一些奇怪的行为,我无法完全理解ls
中文文件名。我正在运行 macOS 13.6.1,启用了 SIP(无核心操作系统修改),安装了 MacPorts,并将美国英语作为主要语言。
首先,在空白文件夹中运行这个小脚本来创建一些测试文件:
\nimport 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”):
% 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) 我在 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)