对不起。以前的答案效果不佳。而是尝试使用完整的路径来源和目的地。
供参考,以前的答案是:使用 ,因此您的命令变为
我想创建书籍的链接。
首先,我收集所有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/ '{}' ;