我需要帮助shell脚本或linux命令以递归方式查找公共文件夹下的所有js / css文件,然后在找到的同一目录中创建filename.min.jsm,同时将filename.js放在该文件名中。 min.jsm。
例如
public/test/a.js
public/b.js
public/test2/test3/c.js
输出:
public/test/a.js
public/test/a.min.jsm -> a.js is written inside of this file
public/b.js
public/b.min.jsm -> b.js is written inside of this file
public/test2/test3/c.js
public/test2/test3/c.min.jsm c.js is written inside of this file
答案 0 :(得分:1)
创建以下脚本:
#!/bin/bash
filename=$1
path=${filename%/*}
basename=${filename##*/}
prefix=${basename%%.*}
echo "$basename" > "$path/$prefix".min.jsm
然后,运行
find -name '*.js' -exec /path/to/script.sh {} \;
目前还不清楚你想用css文件做什么,但这留给了读者练习。
答案 1 :(得分:1)
您可以尝试以下脚本:
#!/bin/bash
export MY_TMPDIR=$(mktemp -d)
trap 'rm -rf ${MY_TMPDIR}' EXIT
export fstyle_tmp="${MY_TMPDIR}/fstyle"
find /* -regextype posix-extended -regex '.+\.(js|css)' > "${fstyle_tmp}"
while read line; do
line2=$(echo "${line}" | sed -e 's/\.js$//' -e 's/\.css$//')
cp "${line}" "${line2}.min.jsm"
done < "${fstyle_tmp}"
exit 0
#EOF
如果您不想复制CSS内容更改:
line2=$(echo "${line}" | sed -e 's/\.js$//' -e 's/\.css$//')
cp "${line}" "${line2}.min.jsm"
有关:
line2=$(echo "${line}" | sed -e 's/\.js$//' -e 's/\.css$//')
if [[ "${line}" =~ \.js$ ]]; then
cp "${line}" "${line2}.min.jsm"
else
touch "${line2}.min.jsm"
fi
答案 2 :(得分:0)
以下是@ choroba答案的简单重构,它内联shell脚本,因此您不需要单独的文件。
find \( -name '*.js' -o -name '*.css' \) -exec sh -c '
filename=$1
path=${filename%/*}
basename=${filename##*/}
prefix=${basename%%.*}
echo "$basename" > "$path/$prefix".min.jsm
' _ {} \;
我添加了-o -name '*.css'
和一组用于对条件进行分组的括号。如果您不想在CSS文件上运行此操作,请还原该更改,或者向嵌入式shell脚本代码段添加条件。