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



我想创建书籍的链接。

首先,我收集所有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中没有返回。

如何解决这样的问题?

对不起。我目前无法访问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/ '{}' ;

相关内容

最新更新