【问题标题】:mkdir from result of ls来自 ls 结果的 mkdir
【发布时间】:2014-03-08 07:28:57
【问题描述】:

我想列出/media/movies 中的所有文件夹,并在/tmp/movies 中创建同名文件夹
以下 sn-p 对我来说很好,除了带有空格的名称,不知道如何在这里引用

mkdir /tmp/movies
cd /tmp/movies/
ls -1 -d /media/share/*/ | xargs mkdir

名称中还包含括号() 以及单引号'

示例

你是下一个 (2011) (tt1853739)

【问题讨论】:

    标签: bash mkdir ls


    【解决方案1】:
    cd /media/movies
    for dir in */
    do
      mkdir "/tmp/movies/$dir"
    done
    

    或单行:

    cd /media/movies && for dir in */; do mkdir "/tmp/movies/$dir"; done
    

    【讨论】:

    • 作品完美无瑕,如果没有oneliner则接受
    【解决方案2】:

    这应该可行:

    find /media/movies -maxdepth 1 -type d -exec bash -c "mkdir /tmp/\"$(basename {})\"" \;
    

    如果您仍有引用问题,请尝试以下操作:

    find /media/movies -maxdepth 1 -type d -printf "%f" -exec mkdir "/tmp/{}" \;
    

    【讨论】:

    • 这确实很好用,但我的名字中也有括号,这是无法处理的 - 现在如何逃脱?
    • /media/movies 运行find . -maxdepth 1 -type d -exec mkdir -p /tmp/movies/'{}' \; 要简单得多。请注意,/tmp/movies 会在必要时创建。
    • 不 - cannot create directory '/tmp/movies/media/movies/Fast & Furious Five (2011)': No such file or directory - 你可以看到两条路径被合并了。
    • 您是先切换到/media/movies 并运行find . ...,还是从其他地方运行find /media/movies ...?它有所作为。
    • 超级有用的答案。谢谢!
    【解决方案3】:

    您可以使用xargs 中的-I 选项来精确设置ls -1 的输出出现的位置。然后您可以将输出放在引号内,以便将带有空格的名称视为一个单词。试试这个:

    ls -1 /media/share/ | xargs -I % mkdir "%"
    

    【讨论】:

    • 这几乎完美,但不适用于单引号。抱歉,我之前在问题中没有提到这一点
    猜你喜欢
    • 2017-04-07
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多