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存储库,那么最好的条件是进入。 在任何情况下,
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目录检查的必要条件

这正是我所困惑的。我想说它是否是在最后1分钟创建的。您想知道目录是否包含Git存储库(在您执行任何操作(例如初始化该目录)之前)?(这就是我如何解释你的ATM代码)这就是我所困惑的。我想说它是否是在最后1分钟创建的。您想知道目录是否包含Git存储库(在您执行任何操作(例如初始化该目录)之前)?(这就是我对你的ATM代码的解释)dir的内容总是会被修改的。我想说,如果这个目录是在1分钟前创建的,请不要运行此代码,如果它是在1分钟前创建的,请运行此代码。它基于创建时间戳,然后基于修改,因为修改时间戳总是在变化。那么,最好使用“%W”而不是“%Y”,dir在内容方面总是会被修改的。我想说,如果这个目录是在1分钟前创建的,请不要运行此代码,如果它是在1分钟前创建的,请运行此代码。它基于创建时间戳,然后基于修改,因为修改时间戳总是在更改。那么,最好使用“%W”而不是“%Y”