这个问题的灵感来自
我看到这些结构
for file in `find . -type f -name ...`; do smth with ${file}; done
Run Code Online (Sandbox Code Playgroud)
和
for dir in $(find . -type d -name ...); do smth with ${dir}; done
Run Code Online (Sandbox Code Playgroud)
几乎每天都在这里使用,即使有些人花时间对这些帖子发表评论,解释为什么应该避免这种东西......
看到此类帖子的数量(以及有时这些评论被简单地忽略的事实)我想我还不如问一个问题:
为什么循环find的输出是不好的做法,为 返回的每个文件名/路径运行一个或多个命令的正确方法是find什么?
我编写了以下脚本来比较两个目录的输出,其中包含所有相同的文件:
#!/bin/bash
for file in `find . -name "*.csv"`
do
echo "file = $file";
diff $file /some/other/path/$file;
read char;
done
Run Code Online (Sandbox Code Playgroud)
我知道还有其他方法可以实现这一目标。奇怪的是,当文件中有空格时,这个脚本会失败。我该如何处理?
find 的示例输出:
./zQuery - abc - Do Not Prompt for Date.csv
Run Code Online (Sandbox Code Playgroud) 我有一堆从log1到log164.
我正在尝试在 UNIX 终端中列出目录(已排序),但排序功能仅提供如下格式:
home:logs Home$ ls -1 | sort
log1.gz
log10.gz
log100.gz
log101.gz
log102.gz
log103.gz
log104.gz
log105.gz
log106.gz
...etc
Run Code Online (Sandbox Code Playgroud)
我想要的是
home:logs Home$ ls -1 | sort
log1.gz
log2.gz
log3.gz
log4.gz
log5.gz
log6.gz
log7.gz
...{more here}
log99.gz
log100.gz
log101.gz
log102.gz
...etc
Run Code Online (Sandbox Code Playgroud)
我可以用来做什么的任何建议?
我正在处理将文件位置传递给 scp 子进程的 python 脚本。这一切都很好,但我处于这样一种情况,我可能最终将一个路径与一个文件名连接起来,这样路径中就有一个双 ' /。我知道 bash 不关心您是否有多个文件分隔符,但我想知道如何纠正它。是 bash 去掉了额外的/s 还是真的无关紧要?
我问是因为它会为我节省几行代码来/在连接时检查额外的s。我知道这没什么大不了的,但我也很好奇。我有一个包含行cd //usr(而不是cd /usr)的 bash 脚本,这似乎暗示/在路径中使用多个s可能很重要
在整个 POSIX 规范中,都有规定 ( 1 , 2 , 3 ...) 允许实现/特别处理以 2 开头的路径。
POSIX 应用程序(根据 POSIX 规范编写的应用程序可移植到所有 POSIX 兼容系统)不能假设//foo/bar与 相同/foo/bar(尽管他们可以假设///foo/bar与 相同/foo/bar)。
现在那些//foo特殊对待的 POSIX 系统(历史悠久且仍在维护)是什么?我相信(我现在被证明是错误的)微软为他们的 Unix 变体 (XENIX) 和可能的 Windows POSIX 层推送了 POSIX 条款(有人能证实吗?)。
它被 Cygwin 使用,Cygwin 也是 Microsoft Windows 的类似 POSIX 的层。是否有任何非 Microsoft Windows 系统?开放虚拟机?
在//foo/bar特殊的系统上,它用于什么?//host/path用于网络文件系统访问?虚拟文件系统?
某些运行在类 Unix 系统上的应用程序(如果不是系统的 API)是否会//foo/bar特别处理路径(在它们否则将其/foo/bar视为文件系统上的路径的上下文中)?
编辑,此后我在奥斯汀组邮件列表上询问了//foo/bar有关规范中处理起源的问题,并且讨论很有趣(至少从考古学的角度来看)。
给出以下命令:
gzip -dc /cdrom/cdrom0/file.tar.gz | tar xvf –
Run Code Online (Sandbox Code Playgroud)
什么是-在命令中到底意味着什么?它是某种占位符吗?
我为转换项目做了一个网站抓取。我想对那里的文件类型进行一些统计——例如,400 个.html文件、100 个.gif等。有什么简单的方法可以做到这一点?它必须是递归的。
编辑:使用 maxschelpzig 发布的脚本,由于我抓取的网站架构,我遇到了一些问题。一些文件的名称*.php?blah=blah&foo=bar带有各种参数,因此它认为它们都是唯一的。所以解决方案需要考虑*.php*到所有的类型都是相同的,可以这么说。
是否有 Unix 命令从可能包含符号链接的相对路径中获取绝对(和规范化)路径?
在 Debian 系列操作系统中,dpkg --search /bin/ls给出:
coreutils: /bin/ls
Run Code Online (Sandbox Code Playgroud)
也就是说,该文件/bin/ls属于名为coreutils的 Debian 软件包。(如果您对包含未安装文件的包感兴趣,请参阅此帖子)
Fedora 的等价物是什么?
我想知道 Unix 中文件的命名约定是什么?我不确定这一点,但我认为可能有一个应该遵循的通用命名约定?
例如,我想命名一个文件说:backupwith part 2andrandom
我应该这样做吗:
backup_part2_random
或者
backup-part2-random
或者
backup.part2.random
我希望这个问题很清楚。基本上,我想选择一种符合 Unix 哲学的格式。