这就是这种情况。我目前的项目具有以下文件夹结构:
-- public_html
-- assets
-- scss (contains SCSS files, which can be located inside subfolders)
-- scripts
-- vendor
-- plugins (Also contain some SCSS files from the)
-- css
-- also some other folders (no scss or css here though)
-- dist (distribution folder)
-- other folders too for html, php etc...
当我要将脚本上传到远程服务器时,我首先将public_html
中的完整文件夹结构处理到dist
中。我使用构建脚本build.sh
进行此操作,您可以在此处看到它:
function prepareForBuild(){
echo "Updating dependencies...";
bower install
echo "Preparing 'dist' directory...";
mkdir -p dist
rm -rf dist/*
# for the stackoverflow markup... */
}
function buildApp(){
cd assets
echo "Creating temp directory..."
mkDir -p temp
## MERGING TAKES (OR SHOULD) PLACE HERE
find "/" -name '*.scss' -exec cat {} \; > merge.scss
cd ../
pause
# requirejs optimization
echo "Optimizing files...";
node r.js -o build/build.js
}
function cleanup(){
echo "Cleaning up unnecessary files...";
cd dist
rm -f bower.json .gitignore .bowerrc README.md .DS_Store config.rb
rm -f build.sh build.txt composer.json composer.lock
rm -rf build dist scss .git .sass-cache .idea
}
function pause(){
read -p "$*"
}
prepareForBuild
buildApp && cleanup
echo "Building finished!";
问题:
但是,当我在Git bash终端中运行脚本时,它会在此行中断:
find "/" -name '*.scss' -exec cat {} \; > merge.scss
编辑:“ /”或“ \”似乎不影响问题:(
另外,从根(public_html)目录运行:
在正常命令提示符下返回“找不到文件-* .scss”(并输出一个空的merge.scss文件),并只是在Git bash终端中停止工作。 我根据this的答案写了这一行,但是我无法让它对我有用。我还尝试了类似this的方法,但这只会返回更多错误。 我在这里想念什么?
编辑!
我认为bash shell只是停止工作了,但事实并非如此。一段时间后,它将返回以下内容: 这是什么意思?参考文件夹不正确?
目标:
如前所述,我想递归地扫描资产文件夹中的.scss
个文件并将它们合并为一个default.scss
。
如果这个问题太多了,那么也可以提出与require.js
(或仅与节点集成)集成的另一种解决方案,正如您在我的脚本中看到的那样,我已经使用require.js
进行标准优化。 / p>
感谢您的时间和耐心!
答案 0 :(得分:2)
如果要扫描资产目录下的文件,请不要在find
命令中指定根目录。省略目录也是一个好主意。
find . -name "*.scss" -not -type d -exec cat {} \; > merge.scss
如果您希望在新创建的merge.scss
目录中创建temp
文件,则需要将其设置为当前目录。然后,您可以从父目录assets
进行文件扫描。
function buildApp(){
cd assets
echo "Creating temp directory..."
mkDir -p temp
## MERGING TAKES (OR SHOULD) PLACE HERE
cd temp
find .. -name '*.scss' -not -type d -exec cat {} \; > merge.scss
cd ../
pause
# requirejs optimization
echo "Optimizing files...";
node r.js -o build/build.js
}
另外,在bash shell中,pause
命令对您有用吗?除非您另有其他说明,否则这是Windows命令。
答案 1 :(得分:1)
您的 -exec 选项缺少 {} 特殊元素,这意味着与每个 find 迭代匹配的文件。另外,您不能确定地使用'\'作为根路径,至少它是'/'。
不过,理想情况下,出于更好的效率和访问权限的考虑,您应该使用特定的子路径(我想您可能没有权限从根路径访问所有子路径吗?)。
至少,您可以将说明更新为:
find '/' -type f -name "*.scss" -exec cat {} \; > merge.scss