为从命令“find”收集的多本书创建符号链接

时间:2018-03-29 12:00:46

标签: bash ln

我想创建书籍链接。

首先,我收集了所有的JS书籍

    find ~ -type f -iregex -Eo '.*javascript.*\.pdf' > js_books.md 2>/dev/null

它返回35本书

    ../Coding/Books/HTML_Collections/Freeman E.T., Robson E. - Head First HTML5. Programming Building Web Apps with JavaScript - 2011.pdf
    ../Coding/Books/HTML_Collections/Learning Web Design - A Beginner's Guide to HTML, CSS, JavaScript, and Web Graphics - Jennifer Niederst Robbins - 4th Edition - August 2012.pdf
    ..

另外将它们复制到目录js_books

    mkdir js_books
    find ~ -type f -iregex -Eo '.*javascript.*\.pdf' print0 -exec cp '{}' js_books

但是,多个副本占用大量磁盘空间 所以我删除了这些书并尝试在其中建立符号链接。

    find ~ -type f -iregex  '.*javascript.*\.pdf' -print0 -exec ln -s '{}' js_books/'{}' \;

它在dir js_books中没有返回任何内容。

如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

再次抱歉。我目前无法访问BSD ln,但我会认为' {}'包含完整路径,而'{}' js_books/'{}'可以为您提供类似/home/.../file js_books//home/.../file的内容,这当然是无稽之谈。

在我的ln版本中,我甚至不需要指定-t选项,即以下命令有效:

find ~ -type f -name "*.pdf" -exec ln -s {} js_books \;

如果这对您不起作用,请尝试使用basename获取不带路径的文件名:

find ~ -type f -name "*.pdf" -exec sh -c 'ln -s "{}" "temp/$(basename "{}")"' \;

<德尔>抱歉。以前的答案并没有那么顺利。 相反,请尝试使用源和目标的完整路径。

作为参考,上一个答案是:

使用ln&#39; -t选项:

<德尔> -t, --target-directory=DIRECTORY <删除> specify the DIRECTORY in which to create the links

所以你的命令变成find ~ -type f -iregex '.*javascript.*\.pdf' -print0 -exec ln -s -t js_books/ '{}' \;