为从命令 `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/ '{}' \;
我想创作 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/ '{}' \;