我想创建书籍链接。
首先,我收集了所有的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中没有返回任何内容。
如何解决这个问题?
答案 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/ '{}' \;