Git 在bash中有没有办法判断目录是新的还是旧的?
我有一个基本的剧本:Git 在bash中有没有办法判断目录是新的还是旧的?,git,bash,Git,Bash,我有一个基本的剧本: set -eux # We need directories set up. mkdir -p ~/vagrant/Freya-Factory mkdir -p ~/vagrant/Freya-Http mkdir -p ~/vagrant/Freya-Loader mkdir -p ~/vagrant/Freya-Loader-Assets mkdir -p ~/vagrant/Freya-Templates for f in *; do if [[ -d $f
set -eux
# We need directories set up.
mkdir -p ~/vagrant/Freya-Factory
mkdir -p ~/vagrant/Freya-Http
mkdir -p ~/vagrant/Freya-Loader
mkdir -p ~/vagrant/Freya-Loader-Assets
mkdir -p ~/vagrant/Freya-Templates
for f in *; do
if [[ -d $f ]]; then
cd "$f/"
git init
read -e -p "Please enter email for git --global user.email: " email
git config --global user.email "$email"
read -e -p "Please enter name for git --global user.name: " name
git config --global user.email "$name"
cd ../
fi
done
它将cd
放入每个创建的目录中,向您提问并使用这些答案设置git相关信息
但问题是。我只想把这个cd
放到目录中,如果导演是新来的,我就这么做。但我不知道该怎么检查
在bash中有没有一种方法可以说,如果这个目录是刚刚创建的do x,else do y
更新
新的意思是在最后一分钟内创建的。最好是您有一个参考文件或目录,比如$reference,可以与之进行比较-比$reference更新的所有内容都被认为是新的
function birth()
{
stat -c '%Y' "$1"
}
if [ `birth "$dir"` -gt `birth "$reference"` ]
then
echo "$dir" is new
else
echo "$dir" is old
fi
“%Y”返回修改时间。其他时间,请参见《男子统计》
请注意,这并不完全准确-如果上次在同一秒中修改了$dir和$reference,$dir被认为是旧的。如果您需要更精确的比较,find可以帮助您,但这需要更多的工作
结合你对自己问题的最新评论,我还建议:
function birth()
{
stat -c '%Y' "$1"
}
now=`date '+%s'`
old=$((now-60))
if [ `birth "$dir"` -gt $old ]
then
echo "$dir" is new
else
echo "$dir" is old
fi
最好是您有一个引用文件或目录,比如$reference,可以与之进行比较-所有比$reference更新的内容都被认为是新的
function birth()
{
stat -c '%Y' "$1"
}
if [ `birth "$dir"` -gt `birth "$reference"` ]
then
echo "$dir" is new
else
echo "$dir" is old
fi
“%Y”返回修改时间。其他时间,请参见《男子统计》
请注意,这并不完全准确-如果上次在同一秒中修改了$dir和$reference,$dir被认为是旧的。如果您需要更精确的比较,find可以帮助您,但这需要更多的工作
结合你对自己问题的最新评论,我还建议:
function birth()
{
stat -c '%Y' "$1"
}
now=`date '+%s'`
old=$((now-60))
if [ `birth "$dir"` -gt $old ]
then
echo "$dir" is new
else
echo "$dir" is old
fi
如果目录是“新的”,则不输入该目录, 如果不是Git存储库,那么最好的条件是进入。 在任何情况下,
git init
在git存储库中都没有意义,
这就清楚了你对“新”的定义所面临的困境
实际上,我建议这样重写:
git_init() {
git init
read -e -p "Please enter email for git --global user.email: " email
git config --global user.email "$email"
read -e -p "Please enter name for git --global user.name: " name
git config --global user.email "$name"
}
shopt -s nullglob
for f in */; do
if [[ ! -d $f/.git ]]; then
(cd "$f/" && git_init)
fi
done
改进措施包括:
- 在脚本中使用
是很脆弱的,因为您可能会忘记cd
。通过将cd..
包装在cd
中,您无需记住,因为它是一个子外壳,目录更改不会影响父进程(当前)进程(…)
- glob
只匹配目录,因此不需要在循环中进行目录检查。也更容易更有效*/
- shopt-s nullglob是为了避免没有目录的情况。如果没有要匹配的目录,
将不会展开,它将被逐字使用,这将导致错误。这是删除is目录检查的必要条件*/
git init
在git存储库中都没有意义,
这就清楚了你对“新”的定义所面临的困境
实际上,我建议这样重写:
git_init() {
git init
read -e -p "Please enter email for git --global user.email: " email
git config --global user.email "$email"
read -e -p "Please enter name for git --global user.name: " name
git config --global user.email "$name"
}
shopt -s nullglob
for f in */; do
if [[ ! -d $f/.git ]]; then
(cd "$f/" && git_init)
fi
done
改进措施包括:
- 在脚本中使用
是很脆弱的,因为您可能会忘记cd
。通过将cd..
包装在cd
中,您无需记住,因为它是一个子外壳,目录更改不会影响父进程(当前)进程(…)
- glob
只匹配目录,因此不需要在循环中进行目录检查。也更容易更有效*/
- shopt-s nullglob是为了避免没有目录的情况。如果没有要匹配的目录,
将不会展开,它将被逐字使用,这将导致错误。这是删除is目录检查的必要条件*/