【问题标题】:mkdir command for a list of filenames paths用于文件名路径列表的 mkdir 命令
【发布时间】:2012-02-13 18:09:45
【问题描述】:

我有这样的txt文件

/home/username/Desktop/folder/folder3333/IMAGw488.jpg
/home/username/Desktop/folder/folder3333/IMAG04f88.jpg
/home/username/Desktop/folder/folder3333/IMAGe0488.jpg
/home/username/Desktop/folder/folder3333/IMAG0r88.jpg
/home/username/Desktop/folder/folder3333/
/home/username/Desktop/folder/
/home/username/Desktop/folder/IMAG0488.jpg
/home/username/Desktop/folder/fff/fff/feqw/123.jpg
/home/username/Desktop/folder/fffa/asd.png
....

这些是文件名路径,也是文件夹路径。 我要解决的问题是创建所有不存在的文件夹。

我想为每个不存在的文件夹调用 mkdir 命令

我怎样才能轻松做到这一点?

谢谢

【问题讨论】:

    标签: linux bash shell ubuntu


    【解决方案1】:

    这可以在本地 bash 语法中完成,而无需调用外部二进制文件:

    while read line; do mkdir -p "${line%/*}"; done < infile
    

    或者,如果您有bash 4.x,也许只需一次呼叫mkdir

    mapfile -t arr < infile; mkdir -p "${arr[@]%/*}"
    

    【讨论】:

      【解决方案2】:

      怎么样...

      for p in $(xargs < somefile.txt);
      do
          mkdir -p $(dirname ${p})
      done
      

      【讨论】:

      • 有一些更好的方法来处理这个问题,bash 有非常成熟的文件处理设施,但这很好而且很短。
      • xargs 当然是不必要的。 while read p &lt;somefile.txt; do ...
      • ... 或者你可以sed 's%[^/]*$%%' somefile.txt | xargs mkdir -p
      【解决方案3】:
      xargs -n 1 dirname <somefile.txt | xargs mkdir -p
      

      【讨论】:

        【解决方案4】:

        也可以在没有循环的情况下完成(前提是输入文件不大):

        mkdir -p $(perl -pe 's#/(?!.*/).*$##' file.txt)
        

        【讨论】:

          【解决方案5】:

          如果你有文件名“file1”,你可以试试这个oneliner:

          cat file1 |xargs -I {} dirname "{}"| sort -u | xargs -I{} mkdir -p "{}"
          

          用途:

          xargs -I{} mkdir -p "{}"
          

          确保即使是带有空格的路径名也会被创建

          【讨论】:

            【解决方案6】:

            使用 perl 单行代码和File::Path qw(make_path)

            perl -MFile::Path=make_path -lne 'make_path $_' dirlist.txt
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-02-09
              • 2017-04-10
              • 2012-04-18
              • 2018-09-29
              • 2016-05-28
              • 1970-01-01
              • 2019-09-11
              • 1970-01-01
              相关资源
              最近更新 更多