我正在尝试创建一个脚本,以便将具有相同扩展名的文件放在一个与其他文件分开的文件夹中。具体来说,我想要一个在文件夹中执行的脚本,创建所有 .tex 文件的软链接并将它们放在子文件夹“sources”中。
我知道这ln
可以很好地处理正则表达式,并且$PWD
或$(pwd)
返回当前文件夹的路径。所以我尝试执行
ln -s $PWD/*.tex ./sources/
在我的文件夹中,但很快我意识到在我的路径中有一个带空格的文件夹,它ln
被读作多个文件。所以我尝试
ln -s '$PWD'/*.tex ./sources/
和
ln -s '$PWD/*.tex' ./sources/
但在这两种情况下,脚本都会生成一个*.tex
以我的sources
文件夹命名的文件。根据一些帖子,我尝试修改路径中的空格,如下所示
ln -s $(printf "%q\n" "$PWD")/*.tex sources/
ln -s '$(printf "%q\n" "$PWD")'/*.tex sources/
ln -s '$(printf "%q\n" "$PWD")/*.tex' sources/
但输出是相同的(除了一个额外的字符 之外\
)。
帮助?
答案1
您的第一次尝试应该会成功。不是吗?它做了什么?
*
用所有匹配的文件名替换,但不是然后在内部空间进行分裂。
“我知道 ln 可以很好地处理正则表达式”——这是错误的。首先,您在这里看到的是 shell 模式,而不是正则表达式。其次,它不是处理它们,而是处理启动或任何其他命令之前ln
的 shell(通常是)。bash
ln