我想 glob 每个隐藏文件和目录,但不是当前 ( .) 和父目录 ( ..)。
我正在使用 bash。
观察当前行为:
$ ls -a
. .. ...a ...aa ..a ..aa .a .aa .aaa a
$ echo *
a
$ echo .*
. .. ...a ...aa ..a ..aa .a .aa .aaa
Run Code Online (Sandbox Code Playgroud)
我想.*表现得像这样
$ echo .*
...a ...aa ..a ..aa .a .aa .aaa
Run Code Online (Sandbox Code Playgroud)
有外壳选项 dotglob
$ shopt -s dotglob
Run Code Online (Sandbox Code Playgroud)
这在某种程度上起作用;现在我可以使用*glob 的所有内容(隐藏或不隐藏)但不能.和..
$ echo *
...a ...aa ..a ..aa .a .aa .aaa a
Run Code Online (Sandbox Code Playgroud)
但现在我无法区分隐藏与否。此外, …
最近我需要删除大量文件(超过 100 万个),我读到这样做:
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
Run Code Online (Sandbox Code Playgroud)
是最优化的方法之一,我可以保证它比rm -rf.
我不是这方面的专家,但根据我的理解,rsync 性能的原因与它列出文件的方式有关(我想是 LIFO 而不是 FIFO)。现在,问题是,我还需要以有效的方式移动大量文件。经过一番搜索,我发现了这个:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination
Run Code Online (Sandbox Code Playgroud)
虽然这会删除所有移动的文件中~/source,该目录留在那里。由于我有一个类似“循环”的目录结构,数量files/directories非常接近 1,所以我不得不再次运行第一个命令以完全摆脱目录:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination && \
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
Run Code Online (Sandbox Code Playgroud)
直线mv几乎会立即完成,但我的~/destination目录中有应该保留的文件,所以mv不是一个选项。我找到了--prune-empty-dirs和--forcersync 选项,但似乎都没有像我期望的那样工作:
--force force deletion of directories even if not empty
--prune-empty-dirs prune empty directory chains from the …Run Code Online (Sandbox Code Playgroud) 我需要遍历目录中的每个文件。我看到的一种常见方法是使用以for file in *; do. 但是,我意识到它不包括隐藏文件(以“.”开头的文件)。另一个明显的方法是做类似的事情
for file in `ls -a`; do
Run Code Online (Sandbox Code Playgroud)
然而,迭代ls是一个坏主意,因为文件名中的空格会把一切搞砸。遍历目录并获取所有隐藏文件的正确方法是什么?
如果解析 的输出ls很危险,因为它可能会中断一些时髦的字符(空格、\n、 ... ),那么了解目录中文件数量的最佳方法是什么?
我通常依靠find避免这种解析,但同样地,find mydir | wc -l由于相同的原因会中断。
我现在正在 Solaris 上工作,但我正在寻找一个在不同的 unice 和不同的 shell 中尽可能可移植的答案。
我有一堆随机文件夹,其中一些是隐藏的(以句点开头)。我想列出所有这些,按它们的大小排序。
我有一些关于这一点的想法:
ls -d -1 -a */ | xargs du -s | sort
Run Code Online (Sandbox Code Playgroud)
但ls ...它的一部分不显示隐藏文件。我知道之前曾就同一主题提出过一些问题,但答案从未包括包含隐藏文件的方法。或者,如果是,则使用长格式,从而使输出与命令的其余部分不兼容。
让我举个例子吧:
$ echo Hello > file1
$ echo Hello > file2
$ echo Hello > .file3
$ grep Hello * 2>/dev/null
file1:Hello
file2:Hello
Run Code Online (Sandbox Code Playgroud)
在这里您可以看到忽略的 grep.file3从.
预期结果:
$ grep Hello * 2>/dev/null
.file3:Hello
file1:Hello
file2:Hello
Run Code Online (Sandbox Code Playgroud)
在 的情况下ls,有一个参数-a告诉不要忽略以开头的条目,.但我找不到任何功能grep
那么,无论如何要告诉grep不要忽略以 开头的条目.?或者为什么grep忽略它们?
我需要运行一个看起来像这样的命令
mycli --file test.zip --file another_test.zip
如何使用目录中的所有 zip 文件动态运行它?我确定我可以从 find 命令通过管道传输文件,但我不知道如何将它们作为参数附加到另一个命令中,而且我的 bash-fu 不是很好