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

Create symbolic links for multiple books collected from command `find`

我想创作 link 本书。

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

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

它returns35本书

    ../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

它有效,但是,多个副本会占用大量磁盘space。
所以我删除了书,并尝试在其中制作符号link。

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

它 returns 目录 js_books 中没有内容。

如何解决这样的问题?

再次抱歉。我目前无法访问 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-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/ '{}' \;