【问题标题】:Create txt file listing files in subfolders创建 txt 文件列出子文件夹中的文件
【发布时间】:2012-10-16 11:44:04
【问题描述】:

我有一个包含数千个子文件夹的目录。我想让它在每个子文件夹中自动创建一个文本文件,该文件将列出该子文件夹中的所有文件。我在 Ubuntu 10.04 上运行如何在 javascript 或 php 中执行此操作?

【问题讨论】:

  • 我认为您不需要 PHP 来执行此操作,可能是在 Ubuntu 中本地执行此操作的一种方式...askubuntu.com
  • 这当然不是 ubuntu 相关的问题。 Shell 命令几乎在任何地方都以相同的方式工作。但是 Ruriko,您能否澄清一下您真的需要在 PHP 中执行此操作,而不是使用 shell 命令? (您不能在 Javascript 中执行此操作,它 (1) 在客户端上运行或 (2) 没有文件系统权限。)
  • 您认为 PHP 或 JavaScript 为何有助于解决您的问题?

标签: php javascript linux ubuntu


【解决方案1】:

在 shell 中,它是一个命令(尽管嵌入了其他命令):

find /start/path -type d -exec sh -c "ls {} > {}/files.txt" \;

如果您确实需要其他语言版本,请说明您的要求。

【讨论】:

  • @Ruriko 如果你需要从 PHP 中完成,你可以使用 execution functions 之一(我想我会使用 shell_exec())。
【解决方案2】:

这不是 php 的工作 .. 出于实验目的,您可以使用它:

$di = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(__DIR__, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST);
foreach ( $di as $file ) {
    $name = $file->getPathInfo() . "/files.txt";
    touch($name);
    file_put_contents($name, $file->getFilename() . PHP_EOL, FILE_APPEND);
}

如果你想删除文本文件,你可以随时运行

foreach ( $di as $file ) {
    $name = $file->getPathInfo() . "/files.txt";
    is_file($name) AND unlink($name);
}

【讨论】:

  • +1。也不错。没有看到RecursiveIteratorIterator 经常使用。事实上,这是我的第一次。 :-)
【解决方案3】:

它是一个示例 php 代码,它将在每个目录中创建一个文件“files.txt”并将所有文件名放在该文件夹中(不会添加文件夹名称)。确保您对所有文件夹都有写权限

function recursive($directory)
{
    $dirs = array_diff(scandir($directory), Array( ".", ".." ));
    $dir_array = array();

    foreach($dirs as $d)
    {
        if(is_dir($directory."/".$d)){
            $dir_array[$d] = recursive($directory."/".$d);
        }
        else{
            $dir_array[$d] = $d;
            $fp = fopen("$directory/files.txt","a");
            fwrite($fp,"\n$d");
        }
    }
}   

recursive($start_directory);
?>

【讨论】:

    【解决方案4】:

    您可以通过使用 scandir 编写递归 PHP 函数来实现此目的。 有关 PHP scandir 的更多帮助,check this

    【讨论】: