根据文件和文件夹名称移动文件夹中的文件

时间:2014-01-27 09:58:52

标签: unix

我有一个文件列表和一个文件夹列表,我想在其中移动文件。

换句话说,我的文件名为:a_myfile.txt和名为“a”的文件夹,然后是文件:b_myfile.txt和名为“b”的文件夹,然后是c_myfile.txt和名为“c”的文件夹。我想将文件a_myfile.txt移动到名为“a”的文件夹中,然后将名为b_myfile.txt的文件移动到名为“b”的文件夹中,依此类推。我有数千个文件和数千个文件夹,因此无法手动移动这些文件。

2 个答案:

答案 0 :(得分:1)

使用循环,使用shell参数扩展来获取 foldername ,创建它并移动文件。

for i in *.txt; do
   mkdir -p "${i%%_*}"
   mv "${i}" "${i%%_*}"
done

答案 1 :(得分:0)

我会使用目录迭代器类,但是一些PHP安装没有安装SPL。所以我只会使用全球解决方案。

以下是一些扫描目录和文件名的代码,将它们存储在一个数组中,然后检查下划线之前的第一个字符,然后相应地移动它。

    $directory = '/path/to/my/directory';
//to get rid of the dots that scandir() picks up in Linux environments
    $scanned_directory = array_diff(scandir($directory), array('..', '.'));

    foreach($scanned_directory as $filename)
    {
    $f = explode("_", $filename);
    $foldername = $f[0];

//Create directory if it does not exists
    if (!file_exists($foldername)) {
        @mkdir($foldername);
    }

//Move the file to the new directory
    rename($directory. "/". $filename, $directory. "/". $foldername. "/". $filename);


    }

注意:新文件夹将位于旧目录中。您可以对其进行自定义,以创建新文件夹并将其移动到您希望轻松的文件夹中。