CentOS 5.9
前几天我遇到了一个问题,一个目录有很多文件。数一数,我跑了ls -l /foo/foo2/ | wc -l
原来在一个目录中有超过 100 万个文件(长话短说——根本原因正在得到解决)。
我的问题是:有没有更快的计数方法?获得计数的最有效方法是什么?
I have a script that needs to create temporary files for its work, and clean up after itself. My question is about finding the right base directory for the temporary files.
The script needs to work on multiple platforms: Git Bash (Windows), Solaris, Linux, OSX. On each platform, the preferred temp directory is expressed differently:
%TMP% (and possibly %TEMP%)$TMPDIR$TMPDIR but appears to be unset on multiple systems I triedSo …
显而易见的
ls -dR
Run Code Online (Sandbox Code Playgroud)
不起作用。
我目前正在使用
find /path/ -type d -ls
Run Code Online (Sandbox Code Playgroud)
但输出不是我需要的(子文件夹的简单列表)
有出路吗?
我已经看到很多解释为什么基于 Unix 的操作系统中空目录的链接数是 2 而不是 1。他们都说这是因为 '.' 目录,每个目录都指向它自己。我明白为什么会有一些“。”的概念。对于指定相对路径很有用,但是在文件系统级别实现它有什么好处?为什么不让 shell 或采用路径的系统调用知道如何解释它呢?
'..' 是一个真正的链接对我来说更有意义——文件系统需要存储一个指向父目录的指针才能导航到它。但我不明白为什么“。” 成为一个真正的链接是必要的。它似乎也导致了实现中的一个丑陋的特殊情况——你会认为你只能释放链接数小于 1 的 inode 使用的空间,但如果它们是目录,你实际上需要检查一个链接数小于 2。为什么不一致?
我知道我可以这样做来获取目录名称列表:
find . -type d -maxdepth 1
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
.
./foo
./bar
Run Code Online (Sandbox Code Playgroud)
我更喜欢没有./. 有没有办法让 find 只输出原始名称?
我尝试将列表发送到 stat 以对其进行格式化,但这只是给了我相同的结果:
find . -type d -maxdepth 1 -print0 | xargs -0 stat -f '%N'
Run Code Online (Sandbox Code Playgroud) 如果我将当前/工作目录(使用 导航到它cd)设置为某个特定目录,然后键入:
rm *.xvg
Run Code Online (Sandbox Code Playgroud)
这个命令会做什么?这是真的,上面的命令将只删除文件扩展名为.xvg 只有在工作目录?
在询问之前,我对尝试此操作感到紧张,因为我想绝对确定上述命令只会删除位于 WORKING DIRECTORY 中的.xvg文件。
假设用户有Directory1并且它包含File1 File2 CantBeDeletedFile 如何使用户永远不会被允许删除CantBeDeletedFile?
如果我更改Directory1的所有权并删除写入权限,用户将无法删除任何文件。他们也无法添加新文件等。
我只是希望能够设置一些永远不会被删除的文件。
更具体的描述。
我正在创建用户配置文件。我正在他们的Desktop 中创建应用程序启动器文件。所以我想设置一些启动器文件 (.desktop) 并让它们让用户只能启动它们而他们不能重命名或删除,只需启动。
当前,如果用户拥有包含任何文件的目录。他可以删除。
如果没有适用于所有 *nix 的通用方法,那就是 Linux 和 ext4 FS。
假设我只是创建目录 newDirectory 然后我执行 ls -ld 命令。我看到硬链接的数量是2。从一开始,硬链接2到底是什么?当前目录中的子目录数是否等于硬链接数 - 2?
为什么cd ..在根文件夹中键入,没有警告或失败并出现错误?
我希望:
/$ cd ..
-bash: cd: ..: No such file or directory
Run Code Online (Sandbox Code Playgroud)
相反,我留在了/。当然,这是因为..确实存在于 中/,并且很简单/,就像.。我只是想知道为什么会这样。
是否有一个标志/选项touch,mkdir,>,或其他一些命令,让我产生在同一时间一个文件和任何不存在的父目录?
例如,假设我在一个空文件夹中。现在,如果创建文件夹时父目录不存在,我可以创建它们
mkdir -p nested/folder
Run Code Online (Sandbox Code Playgroud)
我可以在现有目录中创建文件
touch nested/folder/something.txt
Run Code Online (Sandbox Code Playgroud)
但是我无法在尚不存在的目录中创建文件
touch nested/folder/deep/more.txt
Run Code Online (Sandbox Code Playgroud)
触摸:无法触摸“嵌套/文件夹/深度/更多.txt”:没有这样的文件或目录
我如何在创建该deep文件夹的同时创建该文件夹more.txt?
directory ×10
ls ×3
shell ×3
bash ×2
find ×2
rm ×2
cd-command ×1
command-line ×1
filesystems ×1
hard-link ×1
mkdir ×1
permissions ×1
shell-script ×1
tmp ×1
touch ×1